2009-06-26 18 views
2

プリコンパイル済みヘッダーを使用する場合、すべてのファイルに#include "stdafx.h"が必要ですか?または、ソースファイルだけにそれを含める必要があります。MSVCプリコンパイル済みヘッダー: "stdafx.h"を#includeする必要があるファイルはどれですか?

EDIT:また、私のプリコンパイル済みヘッダーファイル#includes多くのSTLヘッダー。しかし、私のヘッダーでは、ときどきstd::vectorか何かを返す関数を持っているので、とにかく#include <vector>にする必要があります。これはstdafx.hを含むより悪いですか?ユニットテストフレームワークの定義を含める必要があります。

答えて

4

すべてのソースファイルは、コメントでない行の前にそれを含める必要があります。ヘッダーには、すべてのソースファイルに他のヘッダーの前にインクルードされるので、ヘッダーに含める必要はありません。

+0

しかし、別のプロジェクトのソースファイルにこのヘッダーファイルが含まれているとどうなりますか?この場合、最初のプロジェクトのstdafx.hはインクルードされません。 –

+0

プロジェクトごとに1つのプリコンパイル済みヘッダーのみが許可され、各_sourceファイル_(他のヘッダーファイルには含まれません)が最初に含まれている必要があります。異なるプリコンパイル済みヘッダーファイルを持つ2つのプロジェクトで作業したい場合は、別々のプロジェクトであれば問題ありません。彼らはそれぞれ独自のヘッダーファイルを取得しますが、競合は発生しません。 – bdonlan

+0

あなたは私を理解していません。 プロジェクト1: stdafx.hを: の#include ... One.h: ベクトルいくつかの(); One.cpp: "One.h" の#include "stdafx.hを" の#include .... プロジェクト2: Two.cpp: の#include "One.h" Two.cppのベクトルクラスは定義されていないので、ここにはエラーがあります。 –

0

プリコンパイル済みヘッダーファイルをプロジェクトレベルまたはファイルレベルで使用するかどうかを設定できます。プロジェクト設定では、プロジェクトプロパティダイアログに移動し、「設定プロパティ/ C/C++ /プリコンパイル済みヘッダー」をクリックします。プリコンパイル済みヘッダーの作成/使用のオプションがあります。ファイルプロパティダイアログで同じオプションを設定することにより、各.cppファイルのプロジェクトレベルの設定を上書きすることができます。

+0

それは問題ではなかった.... – rlbond

0

すべてのC/C++ファイルは、そのプロジェクト用に設定されている場合は、先頭にコンパイル済みヘッダーがある必要があります。しかし、C/C++ファイルごとにそれをオフ/オンにすることができます(Keiが言ったこと)。

標準ヘッダーを含める場合は、それらをすべてプリコンパイル済みヘッダーに配置します。次に、通常のヘッダー(.h)ファイルにそれらを必要とします。すべてのプロジェクトとファイルがプリコンパイル済みヘッダーを使用している限り。

0

他にも、ソースファイルだけがプリコンパイル済みヘッダーを含める必要があります。私は、私の意見では、コードを正しくコンパイルして、あらかじめコンパイルされたヘッダを付けておくべきだということを付け加えたいと思います。これを達成するには、ヘッダーは自己完結型で、他の必須ヘッダーを含むソースファイルに依存しないようにする必要があります。私はコンパイルを高速化する方法としてのみプリコンパイルされたヘッダーを参照し、プロジェクト内のすべての使用されたヘッダーのレポジトリではありません。

関連する問題