g++ -E选项输出



使用此选项,我接收预处理后的文件。有很多这样的行:

# 91 "/usr/include/stdint.h" 3 4

这些数字是什么意思?首先,我认为#91是包含文件的行数,但事实并非如此。关于3 4我一点也不知道

根据官方文档,该行的格式为:

# linenum filename flags

linenum表示以下行起源于该行号的filename。然后有四个标志:

  • 1 -新建文件
  • 2 -返回到文件
  • 3 -系统头文件
  • 4 -将其视为包裹在extern "C"

那么让我们来解释你的行标记:

# 91 "/usr/include/stdint.h" 3 4

下面这行源自/usr/include/stdint.h的第91行。它是一个系统头文件,应该被当作extern "C"包装。

这些被称为"行标记"。来自文档:

源文件名和行号信息由

格式的行传递
# linenum filename flags

这些被称为行标记。它们会根据需要插入到输出中(但绝不会插入到字符串或字符常量中)。它们的意思是下面的行起源于文件filename的linenum行。filename永远不会包含任何非打印字符;它们被替换为八进制转义序列。

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

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

有标志(空格分隔),其含义为:

1 - Start of a new file
2 - Returning to previous file
3 - Following text comes from a system header file (#include <> vs #include "")
4 - Following text should be treated as being wrapped in an implicit extern "C" block.

最新更新