预处理输出中的 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
这些是简单 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