2013-02-21 127 views
8

摘要:C++预处理器输出包含一些行,表示<built-in>。我很想知道这些是什么。C++预处理器输出中的<built-in>是什么?

详细

当我编译在与clang++ -E名为test.cpp文件以下代码(从g++输出类似):

#include <iostream> 

int main() 
{ 
    std::cout << "Hello World!" << std::endl; 
    return 0; 
} 

输出的前几行如下:

#1“test.cpp”
#1 “TEST.CPP” 1
#1 “<内置>” 1 ​​
#1 “<内置>” 3
#156 “<内置>” 3
#1“<命令行>” 1 ​​
#1 “<内置>” 2
#1 “TEST.CPP” 2

我的问题是什么做的<built-in>语句的意思。

回答

2

宏扩展为“1”,并且在内置的情况下,宏被默认定义,例如,__cplusplus,在命令行的情况下,宏是在命令行所定义,即,-DMACRO=1

你可以看到预定义宏的列表:

cpp -dM foo.h 
+2

它看起来像我还需要-E开关让人类可读的输出,至少在'.cpp'文件。输出的顺序也与应用哪个宏相对应?在包含的测试用例中,我试图弄清楚“#156”“3”在做什么。 – 2013-02-21 23:01:55

+0

该顺序对应于宏的应用顺序。试试'-dN'标志,它应该帮助你跟踪那156。 – perreal 2013-02-22 00:04:41