web-dev-qa-db-ja.com

stdafx.h:いつ必要ですか?

Stdafx.hを含む非常に多くのコードが表示されます。たとえば、notプリコンパイル済みヘッダーが必要です。そして、私は手動でwillすべての必要なシステムヘッダーを含めます。その場合、必要な場所を知っておく必要がある他の理由がありますstdafx.h

30
Ashwin Nanjappa

プリコンパイル済みヘッダーを使用したくない場合、標準のインクルードファイルを使用しても意味がありません。これにより、それを含むすべてのファイルのビルドが遅くなり、不要なものが追加されます。それを取り除き、必要なヘッダーを含めるだけです。

17

事前にコンパイルされたヘッダーがなくても、stdafx.hはすべてのファイルに共通のヘッダーインクルードと定義をグループ化するので便利です。

もちろん、すべてのファイルでこれらすべての定義を繰り返すことを選択できます。 stdafx.hは必ずしも必要ではありません。

2
kgiannakakis

stdafx.hは別のヘッダーファイルです。あなたが落ちた場合は、それを含めずにプロジェクトから削除しても構いません。

ただし、プリコンパイル済みヘッダーが正確に機能するようにstdafx.hのようなファイルを用意し、各ソースファイルにすべてのものを手動で含めないことは非常に一般的です。

2
sharptooth

Stdafx.hを使用せずに、プリコンパイル済みヘッダー(これは良いことです)を使用できます(私もそれを嫌います)。 VC++ 6.0へのアクセス権しかありませんが、プロジェクト設定| C/C++ |プリコンパイル済みヘッダーに移動し、「プリコンパイル済みヘッダーの自動使用」を選択しますが、「コンパイル済み」ボックスは空のままにします。

2
anon

他の人が述べたように、プリコンパイル済みヘッダーが必要ない場合、stdafx.hは本当に必要ありません。そして、一般的なインクルードをグループ化するためだけに使用することは、実際にはかなり悪い習慣です。

実際、プリコンパイル済みヘッダーを使用する場合でも、プロセスが実際に必要とするヘッダーをstdafx.h(またはprecompiled.hまたは呼び出したいもの)の後に含めることをお勧めします-プリコンパイル済みヘッダーの#ifdefマジックと共にオフにするPCHの使用。

どうして?モジュールの依存関係を確認するため。 PCHを無効にできるので、必要なモジュールが含まれているかどうかを把握できます。その後、.cppファイルと.hファイル(もちろんPCHヘッダーを除く)を解析して、モジュールの相互依存関係をチェックするツールを作成できます。

1
snemarch

私はこれが古いスレッドであることを知っていますが、読者に私の意見を伝えたいと思いました。私は2017年にこれを見つけたので、ここに来るのは私だけではないと確信しています。

事前にコンパイルされたヘッダーを使用することには利点があります。これは、長年にわたって慣習を使用しているため、他の人に見落とされがちです。 C++標準は大きく進化しました。あなたが必要とする可能性のある20個のファイルにベクターを含める代わりに、PCHファイルを使用すると、コンパイラーの作業が少なくて済み、誰にとっても幸せな顔になります。また、VERIFY、ASSERT、スマートクラスオブジェクトなど、共通のマクロをそこに配置できます。クラスヘッダーをそこに置かないでください。それは意味がありません。むしろ、標準ライブラリまたは、私が言及したマクロのような多くの場所でグローバルに使用する必要があるものです。

iostream、string、vectorなど、必要なすべてのファイルに必要なヘッダーを含めることで、基本的にこれを実現し、ファイルへのインラインとして毎回効果的にコンパイルします。 「Pre Compiled」ヘッダーを含めます。名前だけでベルが鳴ります。

0
Gary Stewart