2016-08-25 4 views
1

This答えはこう述べています。ショー

コンパイラは一つの大きなソース(.CPP)が適切にそのヘッダを ファイル見て含まれています。ソースファイルは、オブジェクトファイルにコンパイルされた のコンパイル単位です。

この大きな.cpp(.c)ファイルは何とか表示できますか?もしそうなら、Linux(gcc)とWindows(VisualStudio)の両方のプラットフォームでそれを行う方法。

PS:Visual Studioで/ Pオプションを試してみました(ソリューションエクスプローラのファイルを右クリックし、プロパティの設定、C/C++ - >プリプロセッサ - >プリプロセス - > [ YES/P])しかし、私はいくつかの* .iファイルを取得しました。これはもはやC++のようには見えません(おそらくC++ですが、多くのテンプレート、メモリ割り当ての定義などがあります)。私が言及していた答えは、 "大きな1つの.cppファイル"についてのことでした。だから私は、#includeディレクティブだけが対応するファイルに置き換えられるか、間違っていて、* .i出力が私に求められたものだと仮定しましたか?

+1

[cpp](http://linux.die.net/man/1/cpp)をお探しですか? – dvhh

答えて

5

Linuxの場合、-E gccオプションを使用してください。 "大きな"ソースコードをstdoutに出力し、それをファイルにリダイレクトすることができます。

Visual Studioでは、標準出力の場合は/E、ファイルの場合は/Pのオプションを使用します。ところで

、ご質問は、すでに個別に尋ねた:あなたが尋ね使用すると、1つにつき1つの*.iファイルを取得するよう

もの*.iファイルは、まったく同じです*.cppファイル。単一のソースファイルをgcc -Eに送ると、GNUコンパイラでも同じことができます。 *.iファイルは*.cppファイルであり、すべてが完全にアンロールされています。あなたのC++ファイルには標準のライブラリヘッダーが直接または間接的に他のインクルードに含まれていると思いますので、前処理されたファイルには恐ろしいコードがたくさんあります。それにもかかわらず、それはまだC++であり、あなたのソースにあるものよりもいくらか「純粋な」C++です。 Visual Studioプリプロセッサには、#lineディレクティブが含まれています。これらは、コンパイルエラー時に正しい行番号を報告するためにコンパイラによって使用されます。あなたは/EPでそれらを抑制するかもしれません。

すべてが正しいことを確認するには、空のプロジェクトを作成し、標準のライブラリやサードパーティーのヘッダーを含めずに、独自のソースファイルとヘッダーファイルをいくつか再生します。

+1

重複を見つけた質問には回答しないでください(重複しているだけです)。代わりにそれをクローズできるように複製としてフラグを立てる。 – 2501

+0

@ 2501私の編集を参照してください –

+0

@ 2501よろしいですか、次回は気にします。それにもかかわらず、この場合、著者は彼の質問を編集し、それはもはや重複していない。重複したマークをキャンセルすることはできますか? – Sergey