コンパイラー呼び出しに指定されたソース・ファイルをプリプロセスし、出力プリプロセス済みソース・ファイルを作成するようコンパイラーに命令する。
>>- -E---------------------------------------------------------><
-E および -P オプションの結果は異なります。-E オプションを指定すると、 コンパイラーは、入力が C または C++ ファイルであり、 出力が何らかの方法で再コンパイルまたは再処理されると見なします。これらの前提事項を以下に示します。
-P オプションは、汎用のプリプロセッシングに使用されます。入力または出力の使用目的に関する前提事項はありません。 このモードは、C または C++ で作成されていない入力ファイルとともに使用します。 このため、プリプロセス固有の構成は、ANSI C 標準の記述のとおりに処理されます。 この場合は、継続シーケンスは、その標準の「変換フェーズ (Phases of Translation)」の記述通りに除去されます。プリプロセス固有のテキストでないテキストは、すべてそのまま出力されます。
-E を使用すると、 トークンのソース位置を保持するために #line ディレクティブが生成されます。ブランク行は除去されて、 代わりに #line ディレクティブで置換されます。
-P オプションでは、 行継続シーケンスは除去されて、ソース行が連結されます。-E オプションでは、 トークンは、ソース位置を保持するために別個の行に出力されます。この場合は、継続シーケンスは除去されます。
-E オプションは、-P、 -o、 および -qsyntaxonly オプションをオーバーライドして、任意のファイル名を受け入れます。
-M オプションと共に使用された場合、-E は .C、.cpp、.cc (すべて C++ ソース・ファイル)、.c (C ソース・ファイル)、または .i (プリプロセスされたソース・ファイル) ファイル名サフィックスを持つファイルに対してのみ機能します。 認識されないファイル名サフィックスを持つソース・ファイルは C ファイルとして扱われてプリプロセスされるため、エラー・メッセージは生成されません。
-C が指定されていない限り、プリプロセスされた出力では、コメントは単一のシングル・スペース文字で置換されます。コメントが複数のソース行にわたり、-C が指定されていない場合は、 改行および #line ディレクティブが出されます。 マクロ関数引数にあるコメントは削除されます。
myprogram.C をコンパイルし、プリプロセスされたソースを標準出力に送るには、以下のように入力します。
xlc++ myprogram.C -E
myprogram.C が以下のようなコード・フラグメントを持っている場合:
#define SUM(x,y) (x + y) ; int a ; #define mm 1 ; /* This is a comment in a preprocessor directive */ int b ; /* This is another comment across two lines */ int c ; /* Another comment */ c = SUM(a, /* Comment in a macro function argument*/ b) ;
出力は以下のようになります。
#line 2 "myprogram.C"
int a;
#line 5
int b;
int c;
c =
(a + b);
関連情報