Ant*_*ony 16 c++ include-guards preprocessor-directive
#include <iostream>
int main()
{
int value1 = 1, value2 = 10;
std::cout << "Min = " << std::min(value1,value2) <<std::endl;
std::cout << "Max = " << std::max(value1,value2)<< std::endl;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,min和max函数的定义<algorithm>.
如果我没有告诉预处理器包含<algorithm>为什么代码仍然有效?
chw*_*arr 21
最有可能的是,内部的东西iostream直接或间接地包含了一些定义std::min和的标题std::max.(也许algorithm它本身已被包含在内.也许是一些用于实现C++标准库的内部头文件.)
你不应该依赖这种行为.包括algorithm如果你想要的std ::分和std ::最大.
如果您习惯使用具有模块系统的语言,其中模块可以导入其他模块而不必强制从其导入中导出任何内容(例如,Racket的模块系统),则此行为可能会令人困惑.
但是,回想一下,#include正在进行文本替换.处理#include行时,它将从.cpp文件中删除,并替换为它指向的文件的内容.
大多数编译器都可以选择转储运行预处理器的输出,以便跟踪包含内容的内容.您在评论中对kmort的回答说您使用的是Visual Studio Express.使用Visual C++编译器将文件预处理到文件的命令行是cl /P foo.cpp.使用此输出,我们可以发现定义std::max来自特定于实现的标头xutility.(将插入符号放在文本"std:max"中并在Visual Studio中按F12会更快.: - ])
kmort还提到了/showIncludes编译器开关.使用它,我们可以轻松追踪包含链.这是我跑步减少的输出.
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\iostream
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\istream
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ostream
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ios
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xlocnum
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\streambuf
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xiosbase
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xlocale
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\stdexcept
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstring
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xmemory0
Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xutility
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19676 次 |
| 最近记录: |