预处理输出中的 C 预处理指令

C preprocessor directives in preprocessed output

这些是简单 C 程序的预处理器输出的前几行。他们的意思是什么?

# 1 "test.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 325 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "test.c" 2
# 1 "some_path/stdio.h" 1 3 4
# 64 "some_path/stdio.h" 3 4

这是我的程序:

#include <stdio.h>

int main()
{
    printf("Hello, World!\n");
    return 0;
}
 # linenum filename flags

这些称为线标记。它们根据需要插入到输出中(但绝不会在字符串或字符常量中)。它们意味着以下行源自文件 filename 的第 linenum 行。文件名永远不会包含任何 non-printing 个字符;它们被替换为八进制转义序列。

文件名后有零个或多个标志,分别是‘1’、‘2’、‘3’或‘4’。如果有多个标志,则用空格分隔它们。以下是标志的含义:

  • ‘1’表示新文件的开始
  • ‘2’这表示返回到一个文件(在包含另一个文件之后)。
  • '3' 这表明以下文本来自系统头文件,因此应抑制某些警告。
  • ‘4’ 这表示接下来的文本应该被视为被包裹在一个隐式的 extern "C" 块中。

来源:GCC Manual