2016-08-01 59 views
0

我在预处理器输出中有这些行。预处理器输出字段

......

  • 1 “test.c的”
  • 1 “/usr/include/stdio.h” 1 3 4
  • 27“的/ usr /包括/标准输入输出.H” 3
  • 4 1 “/usr/include/features.h” 1 3 4
  • 374 “/usr/include/features.h” 1 3 4

..... 。

我知道在stdio.h的第27行有一个调用来包含features.h,但是这两行中定义的其他数字1,3,4是什么。 任何人都可以解释这些不同的领域究竟意味着什么精细。

当你看到

1 “/usr/include/stdio.h” 1 3 4

27 “/usr/include/stdio.h” 3 4

为什么是两个包容stdio.h或者如果我错了,那是什么意思?

回答

0

从GCC documentation

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

#LINENUM文件名标志

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

文件名出现后零个或多个标记为,它们是'1','2','3', 或'4'。如果有多个标志,空格会将它们分开。这里是 标志的含义:

'1'这表示新文件的开始。

'2'这表示返回到文件(在包含另一个文件后)。

'3'这表明以下文本来自系统头文件,因此应该禁止某些警告。

'4'这表明下面的文本应该被当作包装在隐含的外部“C”块中。

+0

谢谢。所以从上面的解释中可以看出,1“test.c”定义了它下面的行来自test.c的第1行,因此下一行为“/ usr/include/stdio”。h“1 3 4表明这是一个新文件的开始,下面这一行来自于第1行的”/usr/include/stdio.h“,它具有系统头文件,并且应该被当作包装在隐式的extern C块中?但是1“/usr/include/stdio.h”3 4行真的起源于“/usr/include/stdio.h”的第1行吗? –

+0

我想从字面上理解它,但我有点困惑相同的1“/usr/include/stdio.h”3 4起源于/usr/include/stdio.h文件,如何? –