2009-08-24 8 views
5

stdafx.hにヘッダー(ah)を入れ、そのヘッダーにstdafx.hに記載されていない別のヘッダー(bh)が含まれている場合、それはああの一部としてコンパイルされていますか?それがa.hにコンパイルされている場合、誰かがb.hを直接インクルードするとどうなりますか?これはあらかじめコンパイルされているかどうか?Visual C++のプリコンパイル済みヘッダーに関する質問

この質問をする私の動機は、私が作業しているソフトウェアのstdafx.hファイルの内容を最適化しようとしていることです。再ビルドと増分ビルドの両方の時間が重要です。 #includeディレクティブのすべての.cppファイルを単純に検索し、各ファイルが含まれる回数を数えられるかどうかは疑問でした。含まれていたファイルがstdafx.hファイルの良い候補になることがあります。もちろん、どのファイルが含まれるだけでなく、どのファイルにインクルードされているかを考慮する必要がある場合、この戦略は完全に偽です。

私はそれが重要疑うが、私たちは、Visual Studioを使用している2005年

+0

これには投票してください:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4931119-allow-precompiled-headers-to-be-shared-between-pro –

答えて

4

a.hとb.hは、プリコンパイル済みヘッダーの一部となり、後でそれらを含める必要はありません。必要なのは、a.hまたはb.hが必要なstdafx.hをインクルードすることだけです。 stdafx.hのあとに明示的にahまたはbhを含めると(stdafx.hインクルードの前のすべてのコードは無視されます)、2回目はコンパイルされません(通常は#pragma onceディレクティブまたは定義で保護されているからです)

ちなみに、いくつかのプリコンパイル済みヘッダーファイル(ただし、すべてのcppファイルに1つしかない)を使用することができます。

+3

あなたは何について言いますかstdafx.hが技術的に真の後にahかbhを含む - コンパイラはヘッダーをもう一度見ます - しかし、ほとんどのヘッダーは#pragmaを一度使うか、これを防ぐためにガードを含めます。実際には、a.hがstdafx.hにあっても必要な場所にa.hとb.hを含めることをお勧めします。そうしないと、stdafx.hの内容を後で無限のコンパイルエラーのリストに入れずに微調整することができなくなります。 –

+0

はい、コンパイルされませんが、コンパイラによって技術的に開かれます。 –

+1

私はニックのアイデアが役に立ったと思っていますが、#progmaが1回あることを知るために追加のディスクIOを行う必要があるため、パフォーマンスが低下する恐れがあります –

関連する問題