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

时间:2012-03-02 14:20:34

标签: c gcc c-preprocessor

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

#include <stdio.h>
#include <stdlib.h>

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

我执行以下命令。

cpp main.c  main.i

在main.i

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

上述行的含义是什么?..

1 个答案:

答案 0 :(得分:5)

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

以下是相关部分:

  

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

     

源文件名和行号信息由表格

的行传达
# linenum filename flags
     

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

     

文件名后面有零个或多个标志,1234。如果有多个标志,则空格将它们分开。这是标志的意思:

     

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