2016-08-01 63 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文件,如何? –