g ++ -E选项输出

时间:2013-03-28 10:46:20

标签: c++ gcc compiler-construction g++ c-preprocessor

使用此选项,我会在预处理后收到文件。有许多行,如:

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

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

3 个答案:

答案 0 :(得分:8)

根据the official documentation,该行的格式为:

# 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"

答案 1 :(得分:5)

这些被称为“线标记”。来自documentation

  

源文件名和行号信息由表格

的行传达
# linenum filename flags
     

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

     

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

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

答案 2 :(得分:1)

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

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.