web-dev-qa-db-ja.com

プリプロセッサ出力

オブジェクトファイルに変換する前に、[〜#〜] c [〜#〜]プリプロセッサによって生成された出力を表示するにはどうすればよいですか?

MACRO定義が私のコードにどのように影響するかを確認したい。

38
user191776
gcc -E file.c

または

g++ -E file.cpp

あなたのためにこれを行います。 -Eスイッチは、前処理フェーズの後にコンパイラーを強制的に停止し、現時点で得られているすべてのものを標準出力に出力します。

注:確かにいくつかの#includeディレクティブが必要です。インクルードされたファイルも前処理されるため、大量の出力が得られる可能性があります。

Visual C++の場合、スイッチは/ Eであり、プリプロセッサーの出力を画面に出力します。

56
Faisal Feroz

Cプリプロセッサを直接呼び出すこともできます。

cpp infile outfile

チェックアウト man cpp詳細については。

9
rdas

GCCの場合、

gcc -E -dM file.c

または

g++ -E -dM file.cpp

仕事をする必要があります。 GNU Preprocessor manual puts it )のように、プリプロセッサの実行中に定義されたすべてのマクロ(定義済みを含む)の '#define'ディレクティブのリストを生成する必要がありますマクロ。

6

使用するコンパイラによって異なります。
GCCでは、コマンドラインで-Eフラグを指定して、コンパイラーにプリプロセッサー出力を生成させることができます。

ここで説明されている私のスクリプトをチェックすることができます:

http://mosermichael.github.io/cstuff/all/projects/2011/09/16/preprocessor.html

これは、プリプロセッサーの出力を(うまくいけば)読み取り可能なhtml文書にフォーマットします。プリプロセッサーが原因で異なる行は、ファイルでマークされます。

1
MichaelMoser