g++ -E 选项输出

问题描述 投票:0回答:3

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

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

数字代表什么意思?首先我认为

#91
是包含文件的行数,但事实并非如此。至于
3 4
我根本不知道。

c++ gcc g++ c-preprocessor
3个回答
8
投票

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

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


6
投票

这些称为“线标记”。来自文档

源文件名和行号信息通过表格的行来传达

# linenum filename flags

这些称为线标记。它们根据需要插入到输出中(但绝不插入字符串或字符常量中)。它们意味着以下行源自文件 filename 的第

linenum
行。
filename
绝不会包含任何非打印字符;它们被八进制转义序列取代。

文件名后面有零个或多个标志,分别是

‘1’
‘2’
‘3’
‘4’
。如果有多个标志,则用空格分隔它们。以下是标志的含义:

  • ‘1’
    - 这表示新文件的开始。
  • ‘2’
    - 这表示返回到一个文件(在包含另一个文件之后)。
  • ‘3’
    - 这表明以下文本来自系统头文件,因此应抑制某些警告。
  • ‘4’
    - 这表明以下文本应被视为包含在隐式
    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.
© www.soinside.com 2019 - 2024. All rights reserved.