2012-03-02 91 views
1

對不起,如果我的問題是非常基本的。我想了解預處理器cpp產生的輸出。假設我有一個非常基本的下面的程序。cpp預處理器輸出無法理解?

#include <stdio.h> 
#include <stdlib.h> 

int x=100; 
int main() 
{ 
    printf ("\n Welcome..\n"); 
} 

我執行以下命令。

cpp main.c main.i 
在main.i

# 1 "/usr/include/stdio.h" 1 3 4 

什麼是上面一行的意思

?..

回答

5

gcc documentation恰如其分地解釋了C預處理器的輸出。

下面是有關章節:

從C預處理器輸出看起來很像輸入,除了所有預處理指令行已替換爲空行和用空格的所有意見。長空白行被丟棄。

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

# linenum filename flags 

這些被稱爲linemarkers的線輸送。它們根據需要插入到輸出中(但從不在字符串或字符常量內)。它們表示以下行起源於文件文件名在行linenum文件名將永遠不會包含任何非打印字符;它們被八進制轉義序列取代。

文件名出現零或多個標誌後,即1', 2',3', or 4'。如果有多個標誌,空格會將它們分開。以下是標誌的含義:

1這表示新文件的開始。
2 這表示返回到文件(包含另一個文件後)。
3 這表明以下文本來自系統頭文件,因此應該抑制某些警告。
4 這表明下面的文本應該被視爲包裹在一個隱含的extern「C」塊中。

+0

@Whoami你很想理解預處理器。過去,我遇到了幾個奇怪的C/C++問題,對於這些問題,查看預處理輸出是瞭解發生了什麼的唯一方法。對於包含大量'#include'的大型項目尤其如此 – rob05c 2012-03-02 14:31:30