2013-02-21 48 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