我试图检查为简单的hello world程序生成的翻译单元的外观。 因此,我在test.cpp中编写了以下代码。
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello World"<<endl;
}
然后我使用带有-E选项的g ++编译了上面的文件,并将数据输出到临时文件。 该文件包含c ++代码,中间以#符号开头。
如下所示,
# 1 "test.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "test.cpp"
# 1 "/usr/include/c++/8/iostream" 1 3
# 36 "/usr/include/c++/8/iostream" 3
答案 0 :(得分:2)
http://tigcc.ticalc.org/doc/comopts.html
-E
在预处理阶段之后停止;不要正确运行编译器。输出采用预处理的源代码的形式,其中 发送到标准输出。
不需要预处理的输入文件将被忽略。
然后您可以找到"Preprocessor Output" in gcc documentation:
# linenum filename flags
这些称为线标记。根据需要将它们插入到 输出(但绝不在字符串或字符常量内)。他们的意思 下一行源自文件filename在第linenum行。 filename绝不会包含任何非打印字符;他们是 替换为八进制转义序列。
文件名出现零个或多个标志后,分别是“ 1”,“ 2”,“ 3”, 或“ 4”。如果有多个标志,请用空格分隔它们。这是 标志的含义:
“ 1”表示新文件的开始。
‘2’这表示返回一个文件(包含另一个文件之后)。
- “ 3”这表示以下文本来自系统头文件,因此应禁止某些警告。
- ‘4’表示将以下文本视为包装在隐式extern“ C”块中。
答案 1 :(得分:0)
行号信息。
如果编译预处理后的输出,则可以用来查找原始源的行号和文件。