2012-03-02 6 views
1

私の質問が非常に基本的な場合申し訳ありません。私はプリプロセッサcppによって生成された出力を理解したいと思います。私は非常に基本的な次のプログラムを持っているとしましょう。cppプリプロセッサ出力がわかりませんか?

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

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

次のコマンドを実行します。 main.i

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

cpp main.c main.i 

上の行の意味は何ですか?...

答えて

5

gcc documentationは適切Cプリプロセッサの出力を説明します。ここで

は、関連するセクションです:

Cプリプロセッサからの出力は、すべての前処理指令の行はスペースで空白行とすべてのコメントに置き換えられていることを除いて、多くの入力のように見えます。長い行の空白行は破棄されます。

ソースファイル名と行番号の情報は、これらがラインマーカと呼ばれている

# linenum filename flags 

形のラインによって搬送されます。これらは、必要に応じて出力に挿入されます(ただし、文字列定数または文字定数内には挿入されません)。つまり、ファイルlinenumに次の行が含まれています。 ファイル名には、印刷されない文字は含まれません。それらは8進エスケープシーケンスに置き換えられます。

ファイル名に0以上のフラグがあると、1', 2 '、3', or 4'となります。複数のフラグがある場合は、スペースで区切られます。

1これは、新しいファイルの開始を示します。
2 これは、ファイルに戻ったことを示します(別のファイルを組み込んだ後)。
3 これは、次のテキストがシステムヘッダーファイルから取得されることを示しているため、特定の警告を抑制する必要があります。
4 これは、次のテキストが暗黙のextern "C"ブロックでラップされているものとして扱われるべきであることを示しています。

+0

@ワイアミあなたがプリプロセッサを理解しておいてよかったです。過去にいくつかの奇妙なC/C++の問題にぶつかってきました。前処理された出力を見れば、何が起きているのかを知る唯一の方法でした。膨大な数の '#include 'を持つ大規模なプロジェクトで特にそうです – rob05c

関連する問題