C++ 预处理器输出的数字指令是多少?

C++ 预处理器输出的数字指令是多少?,c++,c,c-preprocessor,C++,C,C Preprocessor,如果使用带有-E标志的gcc、clang或icc只运行预处理器,则输出中的行如下所示: # 1 "test1.cpp" # 1 "<built-in>" 1 # 1 "<built-in>" 3 # 175 "<built-in>" 3 # 1 "<command line>" 1 # 1 "<built-in>" 2 # 1 "test1.cpp" 2 #1“test1.cpp” # 1 "" 1 # 1 "" 3 # 175 ""

如果使用带有-E标志的gcc、clang或icc只运行预处理器,则输出中的行如下所示:

# 1 "test1.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 175 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "test1.cpp" 2
#1“test1.cpp”
# 1 "" 1
# 1 "" 3
# 175 "" 3
# 1 "" 1
# 1 "" 2
#1“test1.cpp”2

这些是什么?它们以#符号开始,就像它们是预处理器指令一样,但这是预处理器的输出。

这些在以下部分中进行了说明:

源文件名和行号信息由表单的行传递

# linenum filename flags
这些被称为线标记。它们会根据需要插入到输出中(但决不会插入到字符串或字符常量中)。它们的意思是,下面的一行源于linenum行的文件名。文件名永远不会包含任何非打印字符;它们被八进制逃逸序列所取代

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

  • 1
    这表示新文件的开始
  • 2
    这表示返回到某个文件(包括另一个文件后)
  • 3
    这表示以下文本来自系统头文件,因此应抑制某些警告
  • 4
    这表明应将以下文本视为包装在隐式外部“C”块中

这些内容在以下章节中进行了解释:

源文件名和行号信息由表单的行传递

# linenum filename flags
这些被称为线标记。它们会根据需要插入到输出中(但决不会插入到字符串或字符常量中)。它们的意思是,下面的一行源于linenum行的文件名。文件名永远不会包含任何非打印字符;它们被八进制逃逸序列所取代

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

  • 1
    这表示新文件的开始
  • 2
    这表示返回到某个文件(包括另一个文件后)
  • 3
    这表示以下文本来自系统头文件,因此应抑制某些警告
  • 4
    这表明应将以下文本视为包装在隐式外部“C”块中

它们用于允许编译器生成合理的错误消息。预处理器围绕行号进行更改,但我们希望编译器错误指示来自处理器输入的行号。

它们用于允许编译器生成合理的错误消息。预处理器围绕行号进行更改,但我们希望编译器错误指示处理器输入的行号