C 预处理器输出



对于使用以下输入 C 程序的gcc -E sample.c -o sample.i

#include <stdio.h>
int main() {
printf("hello worldn");
return 0;
}

sample.i有以下输出,前面有#符号,我想知道带有#的行到底是什么意思。

# 1 "sample.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "sample.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
...

有一些注释可以帮助人们识别预处理器如何扩展各种 #include <...>宏和其他项目。

读取这些行相当于在预处理器遇到宏并展开宏时读取预处理器的日志记录消息。

# 1 "sample.c"

从输入"sample.c"的第一行开始

# 1 "<built-in>"

处理内置的 c pre-procssor 指令(必须是实现细节(,但显示为假"文件"。

# 1 "<command-line>"

处理命令行指令(再次实现细节(,显示为假"文件"。

# 1 "/usr/include/stdc-predef.h" 1 3 4

包括(在第 1 行(stdc-predef.h 文件,它是文件的开头,禁止系统头文件允许的警告,确保符号被视为 C 符号。

# 1 "<command-line>" 2

从命令行返回"假"文件。

# 1 "sample.c"

回到样本中。

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

现在从文件"stdio.h"开始,禁止允许的系统警告,将文件中的符号视为C符号。

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

等等...

文档在这里。

最新更新