很抱歉,如果我的问题非常基本。我想了解预处理器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
上述行的含义是什么?..
答案 0 :(得分:5)
gcc documentation恰当地解释了C预处理器输出。
以下是相关部分:
C预处理器的输出看起来很像输入,除了所有预处理指令行都替换为空行和所有带空格的注释。长时间的空行被丢弃。
源文件名和行号信息由表格
的行传达# linenum filename flags
这些被称为 linemarkers 。它们根据需要插入到输出中(但从不在字符串或字符常量内)。它们表示以下行起源于 filename 中的文件 filename 。 filename 永远不会包含任何非打印字符;它们被八进制转义序列取代。
文件名后面有零个或多个标志,
1
,2
,3
或4
。如果有多个标志,则空格将它们分开。这是标志的意思:
1
这表示新文件的开始2
这表示返回文件(包含另一个文件后)3
这表示以下文本来自系统头文件,因此应禁止某些警告4
这表明以下文本应被视为包含在隐式extern“C”块中。