2013-03-28 41 views
5

使用这个选项我预处理后收到的文件。有许多行如:克++ -E选项输出

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

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

回答

8

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

# linenum filename flags 

linenum指定以下行起源于filename在该行号码。然后有四个标志:

  • 1 - 开始一个新的文件
  • 2的 - 回归到一个文件
  • 3 - 系统头文件
  • 4 - 当做被包裹在extern "C"

因此,让我们理解你的linemarker:

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

下面一行源自的/usr/include/stdint.h 91线。它是一个系统头文件,应视为包装在extern "C"中。

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. 
5

这些被称为“行标记”。从documentation

源文件名和行号信息由形式

# linenum filename flags 

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

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

  • ‘1’ - 这标志着一个新的文件的开头。
  • ‘2’ - 这表明返回到文件中(在已经包括在另一文件)。
  • ‘3’ - 这表明,以下文字来自于系统头文件,所以某些警告应被抑制。
  • ‘4’ - 这表明以下文本应视为包装在隐含的extern "C"块中。