2011-12-08 10 views
3

私はgithubのdoom3コードを見ていて、私は珍しいことに気がつきました。いくつかのファイルは、ファイル1つだけ含まれているイドリブ/ precompiled.hと、このファイルを呼び出してい共通ファイルを1つのヘッダファイルに含めることのメリットは何ですか?

... 
#include <stdio.h> 
#include <stdlib.h> 
#include <stdarg.h> 
#include <string.h> 
#include <assert.h> 
#include <time.h> 
#include <ctype.h> 
#include <typeinfo> 
#include <errno.h> 
#include <math.h> 
... 

のようないくつかの他のヘッダを含んでおり、ヘッダに

#include "../framework/BuildVersion.h" 
#include "../framework/BuildDefines.h" 
#include "../framework/Licensee.h" 
#include "../framework/CmdSystem.h" 
#include "../framework/CVarSystem.h" 

をプログラムするために、任意の正当な理由があるのだろうかそれは初めてのことだから、

答えて

3

これは、プリコンパイル済みヘッダーと呼ばれます。主な利点は、編集速度が飛躍的に向上することです。

precompiled.hのすべてのヘッダーは、プロジェクトごとに1回のみコンパイルされます。あらかじめコンパイルされたヘッダーがなければ、各ヘッダーの内容は複数回コンパイルされます。各.cppファイルは。

+0

です。したがって、システムのほとんどの部分で使用されているヘッダーを置き換えても、完全に再構築するか、あらかじめコンパイルしたヘッダーだけを再コンパイルする必要がありますか? – ibrabeicker

+0

プリコンパイル済みヘッダーには再統合が必要です。一般に、これは完全な再構築を意味します。これは、あらかじめコンパイルされたヘッダーファイルがすべての場所に含まれているためです。 – Stephan

+0

コンパイラがプリコンパイルをサポートしていない場合、コンパイル時の時間が大幅に増加します。コンパイル速度が低下するかどうかは、ヘッダーファイルを調整するかどうかによってまったく異なります。もしそうすれば、すべてが再コンパイルされなければならなくなります。これはコンパイル時間を改善することになります。 – Clearer

2

依存関係は、使用するソース(プラグマ、ガード定義)に一度インクルードしておくのが最も効果的です。これには、ヘッダーを含めながらヘッダーを含めるという繰り返しのツリーを取得すると、非常に小さなオーバーヘッドが発生します。

しかし、標準ライブラリでは、整理がうまくいかず、ヘッダーの標準ベースを提供するのが最も簡単でした。また、「モジュール」アイデアの一種であり、基本層のヘッダーがバンドルされています。

ローカルのインクルードについては、オブジェクト指向でない怠惰であり、依存関係を表現していない可能性があります。

関連する問題