プリコンパイル済みヘッダーの概要

提供: Appmethod Topics
移動先: 案内検索

アプリケーションのコンパイル、ビルド、実行:インデックス への移動

C++ プロジェクトでプリコンパイル済みヘッダーを利用すると利点がありますが、プリコンパイル済みヘッダーを作成し使用するときに回避が必要な落とし穴もあります。

プリコンパイル済みヘッダー利用時の利点

プリコンパイル済みヘッダーを作成し使用すると、大きな 2 つの利点があります。

  • C++ ファイルのコンパイル時間を短縮できる
  • コンパイラで処理する必要があるコード行数を削減できる(場合により、複数桁の規模で異なる)

回避が必要な落とし穴

無制限に使用すると、プリコンパイル済みヘッダーにより実際にコンパイル時間が増加することがあります。 次の潜在的な落とし穴に注意してください。

  • 参照するシンボルが非常に少ない単純なコンパイル ユニットではプリコンパイル済みヘッダーがない方がコンパイルが高速になります。 このような場合にプリコンパイル済みヘッダーを使用すると、結果的にコンパイルが遅くなります。
  • 定期的に変更されるヘッダーがプリコンパイル済みヘッダーの一部である場合は、プリコンパイル済みヘッダーの定期的な再作成のオーバーヘッドにより、使用した場合のメリットが相殺されることがあります。
  • 非常に大きなプリコンパイル済みヘッダーでは、ファイルの読み取りや更新に関連する I/O によりプリコンパイル済みヘッダーのメリットが相殺されることがあります。

一部のヘッダーをプリコンパイル済みヘッダーにインクルードすることは適切ではありません。 以下のガイドラインにしたがって、ヘッダーをプリコンパイルする必要があるかどうかを判断します。

次のタイプのヘッダーをプリコンパイル済みヘッダーにインクルードしない。

  • 正しくガードされていない任意のヘッダー。 つまり、ヘッダー ファイルに、複数回インクルードされている場合でも、コンパイラによって 1 回だけ読み込まれることが保証されるプリプロセッサ ガード(#define の使用)が含まれていない。
  • 2、3 のコンパイル ユニットのみで定義されている一部のマクロに依存するコードを含むヘッダー。
  • 頻繁にまたは定期的に変更されるすべてのヘッダー。
  • 任意のデータを含むすべてのヘッダー。 データを含むヘッダーについてのメッセージがコンパイラにより生成され、したがってプリコンパイラ済みヘッダーの一部にできません。

プリコンパイル済みヘッダーは不正なコードを隠すことができます。 たとえば、必要なヘッダー ファイルを明示的にインクルードできない .cpp ファイルは、見つからないヘッダー ファイルをインクルードしているプリコンパイル済みヘッダーを使用すると、コンパイルが可能で、エラーが発生しません。ただしプリコンパイル済みヘッダーを無効にすると失敗します。 ソースに正しくすべての必要なヘッダーがインクルードされていることを確認するために、たまにプリコンパイル済みヘッダーなしでビルドすることをお勧めします。

関連項目