/E (プリプロセス出力の標準出力へのコピー)
C および C++ ソース ファイルを前処理し、前処理されたファイルを標準出力デバイスにコピーします。
構文
/E
解説
このプロセスでは、すべてのプリプロセッサ ディレクティブとマクロ展開が実行されて、コメントが削除されます。 前処理された出力にコメントを保持するには、/C (プリプロセス時のコメントの保持) コンパイラ オプションも使用します。
/E を使用すると、各インクルード ファイルの先頭と末尾、および条件付きコンパイルのためにプリプロセッサ ディレクティブによって削除された行の周囲にある出力に #line
ディレクティブが追加されます。 これらのディレクティブによって、前処理されたファイルの行に番号が割り振り直されます。 その結果、処理の後の段階で生成されたエラーでは、前処理されたファイルの行ではなく、元のソース ファイルの行番号を参照します。
/E を使用すると、コンパイルが抑制されます。 コンパイルのために前処理済みファイルを再送信する必要があります。 /E を指定すると、/FA、/Fa、/Fm の各オプションからの出力ファイルも抑制されます。 詳しくは、「FA、/Fa (リスティング ファイル)」と「/Fm (マップ ファイルの名前の指定)」をご覧ください。
#line
ディレクティブを抑制するには、/EP (#line ディレクティブを挿入しない stdout へのプリプロセス) オプションを代わりに使います。
前処理した出力を stdout
の代わりにファイルに送信するには、/P (ファイルの前処理) オプションを代わりに使います。
#line
ディレクティブを抑制し、前処理された出力をファイルに送信するには、/P と /EP を一緒に使います。
/E オプションでプリコンパイル済みヘッダーを使用することはできません。
別のファイルへの前処理では、トークンの後にスペースが出力されないことに注意してください。 これにより、不正なプログラムになったり、意図しない副作用が発生したりする可能性があります。 次のプログラムは正常にコンパイルされます。
#define m(x) x
m(int)main( )
{
return 0;
}
ただし、次のようにコンパイルした場合:
cl -E test.cpp > test2.cpp
test2.cpp の int main
は正しくない intmain
になります。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
[追加のオプション] ボックスにコンパイラ オプションを入力します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。GeneratePreprocessedFile
例
次のコマンド ラインを実行すると、ADD.C
が前処理され、コメントが保持され、#line
ディレクティブが追加されて、結果が標準出力デバイスに表示されます。
CL /E /C ADD.C