g ++ -E选项输出

Lit*_*ter 5 c++ compiler-construction gcc g++ c-preprocessor

使用此选项,我在预处理后收到文件.有很多行像:

# 91 "/usr/include/stdint.h" 3 4
Run Code Online (Sandbox Code Playgroud)

这些数字是什么意思?首先,我认为这#91是包含文件的行数,但不是这样.关于3 4我根本不知道.

Jos*_*eld 8

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

# linenum filename flags
Run Code Online (Sandbox Code Playgroud)

linenum指定下列线起源于filename在该行号.然后有四个标志:

  • 1 - 开始新文件
  • 2 - 返回文件
  • 3 - 系统头文件
  • 4 - 对待被包裹 extern "C"

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

# 91 "/usr/include/stdint.h" 3 4
Run Code Online (Sandbox Code Playgroud)

以下行来自第91行/usr/include/stdint.h.它是一个系统头文件,应该被视为包装extern "C".


NPE*_*NPE 5

这些被称为"线标记".从文档:

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

# linenum filename flags
Run Code Online (Sandbox Code Playgroud)

这些被称为线性标记.它们根据需要插入到输出中(但从不在字符串或字符常量内).它们意味着以下行起源于文件filename linenum.filename绝不会包含任何非打印字符; 它们被八进制转义序列取代.

后的文件名来零个或多个标志,它们是‘1’,‘2’,‘3’,或‘4’.如果有多个标志,则空格将它们分开.这是标志的意思:

  • ‘1’ - 这表示新文件的开始.
  • ‘2’ - 这表示返回文件(包含另一个文件后).
  • ‘3’ - 这表示以下文本来自系统头文件,因此应禁止某些警告.
  • ‘4’- 这表示以下文本应被视为包含在隐式extern "C"块中.