コンパイルを高速化するためにプリコンパイル済みヘッダーが使用されていることは知っていますが、ヘッダーに含めるべきファイルについて、すべきこととすべきでないことはありますか? たとえば、多くのブースト ライブラリを使用するプロジェクトがあるので、ブースト ヘッダー ファイルをインクルードするだけstdafx.h
です (私は VS2008 を使用しています)。すべての標準ヘッダー ファイルも含める必要がありますか? たとえば、 を含め<vector>
ても使用しない場合でも、これにより実行可能ファイルのサイズが大きくなりますstd::vector
か? 自分のプロジェクトのヘッダー ファイルを stdafx.h に含めるのは悪い考えですか?
3 に答える
一般的に言えば、アプリケーション全体で使用し、頻繁に変更されないすべてのヘッダー ファイルは、プリコンパイル済みヘッダー ファイルに入れる必要があります。プリコンパイル済みヘッダー ファイルは 1 回だけコンパイルされるため、これによりコンパイルが高速化されます。
頻繁に変更されるヘッダー ファイルを追加すると、プリコンパイルされたヘッダー ファイルの要点を見逃すことになります。これは、この頻繁に変更されるヘッダー ファイルにより、プロジェクト全体が不必要に再コンパイルされる可能性があるためです。
具体的にはテンプレートクラスを定義するので、使わなければstd::vector
オーバーヘッドは大きくなりません。ただし、ヘッダー ファイルが本当に必要でない場合は、ヘッダー ファイルを追加しないことをお勧めします。コンパイル時間やバイナリ サイズに多少のオーバーヘッドがあり、プロジェクトの後半で競合が発生する可能性があります。
プリコンパイル済みヘッダーは実行可能ファイルのサイズには影響せず、コンパイル速度のみに影響します。これらは事前にコンパイルされているため、常に再コンパイルする必要はありません。Windows.h
この機能の主な受益者です。
C++ 標準ヘッダー ファイルとブースト ライブラリ ヘッダー、および頻繁に使用するサード パーティ ライブラリのその他のヘッダーをインクルードすることをお勧めします。これは、実行可能ファイルのサイズには影響しません。
ただし、これらのヘッダーを変更するたびにプロジェクト全体を再構築する必要があるため、独自のプロジェクトのヘッダーを含めないでください。