C++ c++&引用#包括「;输出解释

C++ c++&引用#包括「;输出解释,c++,gcc,g++,C++,Gcc,G++,试图理解#include是如何工作的。我读到,在预处理过程中,它只是用引用文件的内容替换自己 为了验证,我创建了两个文件。名为otherfile的文件仅包含字符串1234,以及包含 #include otherfile abcd 我运行g++-E test.cpp,得到的输出是 # 1 "test.cpp" # 1 "<built-in>" 1 # 1 "<built-in>" 3 # 373 "<built-in>" 3 # 1 "<command

试图理解
#include
是如何工作的。我读到,在预处理过程中,它只是用引用文件的内容替换自己

为了验证,我创建了两个文件。名为
otherfile
的文件仅包含字符串
1234
,以及包含

#include otherfile
abcd
我运行
g++-E test.cpp
,得到的输出是

# 1 "test.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 373 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "test.cpp" 2
# 1 "./wtf" 1
1234
# 2 "test.cpp" 2
abcd
#1“test.cpp”
# 1 "" 1
# 1 "" 3
# 373 "" 3
# 1 "" 1
# 1 "" 2
#1“测试cpp”2
#1.“/wtf”1
1234
#2“测试cpp”2
abcd
其余的行是从哪里来的,它们是什么意思

其余的线路是从哪里来的

它们由预处理器添加

它们是什么意思

按照

源文件名和行号信息由表单的行传递

# linenum filename flags
这些被称为线标记。它们会根据需要插入到输出中(但决不会插入到字符串或字符常量中)。它们的意思是,下面的一行源于linenum行的文件名。文件名永远不会包含任何非打印字符;它们被八进制逃逸序列所取代


您看到的输出特定于gcc预处理器。有关更多信息,请参阅该链接中的参考资料,这些参考资料指向标准要求/允许的内容,而不是gcc预处理器的实际功能。