私は最近、G ++でプログラムを作成しなければならないクラスプロジェクトを持っていました。
私はmakefileを使用しましたが、何らかの理由で.h.gchファイルが時々残されました。
時々、これはコンパイルに影響を及ぼさなかったが、しばしば修正された、または意味のない問題に対してコンパイラーがエラーを発行する結果になることがありました。
2つの質問があります。
1).h.gchファイルとは何ですか?そして
2)クリーンアップされていないのになぜこのような問題が発生するのですか?
私は最近、G ++でプログラムを作成しなければならないクラスプロジェクトを持っていました。
私はmakefileを使用しましたが、何らかの理由で.h.gchファイルが時々残されました。
時々、これはコンパイルに影響を及ぼさなかったが、しばしば修正された、または意味のない問題に対してコンパイラーがエラーを発行する結果になることがありました。
2つの質問があります。
1).h.gchファイルとは何ですか?そして
2)クリーンアップされていないのになぜこのような問題が発生するのですか?
回答:
ファイルについて知りたい場合は、ターミナルで入力してください
file filename
file a.h.gch
与える:
GCC precompiled header (version 013) for C
.h.gch
ファイルの「データ」とだけ言っています。これには適切なデータベースファイルが必要だと思います。
そのGCCプリコンパイル済みヘッダー。
ウィキペディアには半分ほどの説明があります、http://en.wikipedia.org/wiki/Precompiled_header
a)これらはプリコンパイル済みヘッダーです。 http //gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
b).hファイルからの「キャッシュされた」情報が含まれており、それぞれの.hファイルを変更するたびに更新する必要があります。それが発生しない場合-プロジェクトに間違った依存関係が設定されています
他の答えは、gchファイルが何であるかに関して完全に正確です。ただし、コンテキスト(この場合、g ++を使用する初心者)がすべてです。このコンテキストでは、2つのルールがあります。
決して、決して、.hファイルをg ++コンパイル行に配置しないでください。.cppファイルのみ。.hファイルが誤ってコンパイルされた場合は、*。gchファイルをすべて削除してください。
決して、決して、.cppファイルを#includeステートメントに配置しないでください。
ルール1に違反した場合、ある時点で質問に記載されている問題が発生します。ルール2が破られた場合、リンカはある時点で、多重定義されたシンボルについて文句を言うでしょう。