ソース・ファイルをプリプロセスするようにコンパイラーに指示する。
-E および -P オプションの結果は異なります。-E オプションを指定すると、コンパイラーは、入力が C または C++ ファイルであり、出力が何らかの方法で再コンパイルまたは再処理されると見なします。これらの前提事項を以下に示します。
-P オプションは、汎用のプリプロセスのために使用します。入力または出力の使用目的に関する前提事項はありません。このモードは、C または C++ で作成されていない入力ファイルとともに使用します。このため、プリプロセス固有の構成は、ANSI C 標準の記述のとおりに処理されます。この場合は、継続シーケンスは、同標準の "Phases of Translation" の記述のとおりに除去されます。プリプロセス固有のテキストでないテキストは、すべてそのまま出力されます。
-E を使用すると、トークンのソース位置を保持するために #line ディレクティブが生成されます。ブランク行は除去されて、代わりに #line ディレクティブで置換されます。
-P オプションでは、行継続シーケンスは除去されて、ソース行が連結されます。-E オプションでは、トークンは、ソース位置を保持するために別個の行に出力されます。この場合は、継続シーケンスは除去されます。
-E オプションは、-P、 -o、および -qsyntaxonly オプションをオーバーライドして、任意のファイル名を受け入れます。
-E を -M オプションとともに使用すると、ファイル名のサフィックスが .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);