cpp预处理器输出无法理解?

对不起,如果我的问题非常基本。 我想了解预处理器cpp产生的输出。 假设我有一个非常基本的跟随程序。

#include  #include  int x=100; int main () { printf ("\n Welcome..\n"); } 

我执行以下命令。

 cpp main.c main.i 

在main.i

 # 1 "/usr/include/stdio.h" 1 3 4 

上面这行是什么意思?

gcc文档恰当地解释了C预处理器输出。

以下是相关部分:

C预处理器的输出看起来很像输入,除了所有预处理指令行都替换为空行和所有带空格的注释。 空行的长行被丢弃。

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

 # linenum filename flags 

这些被称为线性标记 。 它们根据需要插入到输出中(但从不在字符串或字符常量内)。 它们意味着以下行起源于文件filename在line linenumfilename永远不会包含任何非打印字符; 它们被八进制转义序列取代。

文件名后面有零个或多个标志,即1', 2’, 3', or 4’。 如果有多个标志,则空格将它们分开。 这是标志的意思:

1这表示新文件的开始。
2这表示返回文件(包含另一个文件后)。
3这表示以下文本来自系统头文件,因此应禁止某些警告。
4这表示以下文本应被视为包含在隐式extern“C”块中。