web-dev-qa-db-ja.com

Visual Studioで前処理した後、C / C ++ソースファイルを表示するにはどうすればよいですか?

多くのプリプロセッサディレクティブを含むソースファイルがあるとします。プリプロセッサが処理された後の外観を確認することはできますか?

200
Geo

cl.exe(Microsoft Visual C++へのコマンドラインインターフェイス)には、前処理されたファイルを出力するための3つの異なるオプションがあります(したがって、Visual C++に関する以前の応答に矛盾があります)。

#lineディレクティブなしでファイルを前処理する場合は、/Pオプションと/EPオプションを組み合わせます。

144
bk1e

ほとんどのコンパイラには、プリプロセッサを実行するだけのオプションがあります。 e.g。、gccは-Eを提供します:

   -E  Stop after the preprocessing stage; do not run the compiler proper.  
       The output is in the form of preprocessed source code, which is sent
       to the standard output.

だからあなただけを実行することができます:

gcc -E foo.c

そのようなオプションが見つからない場合は、マシン上でCプリプロセッサを見つけることもできます。通常はcppと呼ばれ、おそらく既にパスに含まれています。次のように呼び出します。

cpp foo.c

他のディレクトリからインクルードする必要があるヘッダーがある場合、通常のコンパイルの場合と同様に、これらのいずれかに-I/path/to/include/dirを渡すことができます。

Windowsの場合は、専門家ではないので、他のポスターに答えて答えを提供します。

118
Todd Gamblin

ソリューションエクスプローラーでファイルを右クリックし、[プロパティ]に移動します。 「構成プロパティー」->「C/C++」->「プリプロセッサー」の下で、「プリプロセス済みファイルの生成」が探しています。次に、ソリューションエクスプローラーでファイルを右クリックし、[コンパイル]を選択します。前処理されたファイルは、拡張子.iで出力ディレクトリ(リリース、デバッグなど)に作成されます(コメントについてSteedに感謝します)。

95
Jim Buck

通常、プリプロセッサの出力に対して後処理を行う必要があります。そうしないと、すべてのマクロが1つのライナーに展開されるだけで、読み取りやデバッグが困難になります。 Cコードの場合、次のようなもので十分です。

gcc -E code.c | sed '/^\#/d' | indent -st -i2 > code-x.c

C++コードの場合、実際にははるかに困難です。 GCC/g ++の場合、 このPerlスクリプト が便利だと思いました。

18
ididak

MicrosoftのC++コンパイラを使用している場合は、cl /EPを試してください。

8
Atempcode

Microsoftコンパイラについては何も知りませんが、GCCではこれを使用できます。

gcc -E -P -o result.c my_file.h

コメントを見たい場合はこれを使用してください:

gcc -E -C -P -o result.c my_file.h

このページ で利用可能なその他のオプション。

8
dzav

Visual Studioでは、/ Pを使用してファイル(またはプロジェクト)をコンパイルできます。

6

Bk1eとAndreas M.が答えたように、コンパイラの/ Pオプションにより、ファイルの前処理が行われます。ただし、VS2005およびPlatform Builder(埋め込みARMプロセッサ用)を使用する私のプロジェクトでは、プロジェクトはそのオプションを有効にするためのダイアログボックス(ジムBによる説明)にオプションを提示しませんでした。

CLを手動で実行して/ Pを追加できましたが、フルビルド中にPlatform Builderによって非表示でアクティブ化された適切なコマンドラインオプションのすべてがわからなかったため、失敗しました。そのため、これらのオプションをすべて知る必要がありました。

私の解決策は、build.logファイルを見て、実行された行を見つけることでした

CL blah-blah-blah myfile.c

この行をクリップボードにコピーしました。 「blah-blah-blah」の部分にはビルドオプションが含まれており、巨大でした。

IDEに戻り、myfile.cを右クリックして[ビルドウィンドウを開く]を選択し、そのウィンドウにビルドコマンドラインを貼り付け、[/ P]を追加しました。

CL /P blah-blah-blah myfile.c

できたプリプロセッサ出力を含むmyfile.iファイルが作成されました。

5
Sam Pittman

CPIP は、Pythonで作成された新しいC/C++プリプロセッサです。前処理済みファイルの詳細な視覚的表現が必要な場合は、試してみてください。

CPIPは、Pythonで実装されたC/C++プリプロセッサです。ほとんどのプリプロセッサは、前処理を、できるだけ早く実行する必要がある汚いジョブと見なしています。これは、プリプロセッサが結果を可能な限り安く取得するために多くの有用な情報を捨てるため、前処理段階で微妙な欠陥を追跡するのを非常に難しくする可能性があります。

前処理を本当に理解している開発者はほとんどいません。多くの人にとって、これは不明瞭な黒魔術です。 CPIPは、それを改善し、CPIPがファイルの依存関係、マクロの使用などに関する素晴らしい視覚情報を生成できるように、前処理のすべての詳細を記録することを目指しています。

CPIPは、cpp(または他の確立されたプリプロセッサ)の代わりになるように設計されていません。代わりにCPIPは、処理速度よりも明快さと理解を重要視しています。

2
thegreendroid

Windows OSでは、この質問に対する簡単な1行の答えは、DOSプロンプトで次のコマンドを使用して、前処理されたファイルを表示することです。

CL /P /C myprogram.c

これにより、myprogram.iというファイルが生成されます。それを開き、拡張されたプリプロセッサを探します。

2
manty