プリコンパイル済みヘッダーが「#include "StdAfx.h"で何をしているのかを理解しています。もちろん、それらをオフにできることはわかっていますが、それは私の質問ではありません。
プリコンパイル済みヘッダーを使用している場合、Visual C++では、StdAfx.hのヘッダーを使用していないファイルであっても、#include "StdAfx.h"にevery cppファイルが必要です。 1つのファイルにStdAfx.hを含めるのを忘れた場合、それはエラーです。しかし、なぜ?明らかなアプローチは、「StdAfx.hをインクルードすると、そのファイルはそれを使用しますが、インクルードするのを忘れると、それらのヘッダーファイルは単にインクルードされない」というものです。 VC++で必要のないときにStdAfx.hを含める必要がある理由がわかりません。通常のヘッダーファイルのように扱う方が簡単だったようです。
これが必要な理由はありますか?
プロジェクトのデフォルトは「プリコンパイル済みヘッダーを使用する」です。必要に応じて、個々のファイルを「プリコンパイル済みヘッダーを使用しない」ように設定できます。
実際には、 stdafx.cpp
自体には、プロジェクトのデフォルトとは異なるオプションがあります。
この構成が言っているのは、「このファイル(stdafx.cpp)のコンパイルを開始し、stdafx.hを含むステートメントのコンパイルが終了したら停止し」、コンパイル済みの情報を.pchファイルとして保存することです。このファイルを最初に使用できるようにします。
プロジェクトのデフォルトは次のとおりです。
この構成が言っていることは、「コンパイルされたファイルごとに、指定された.pchのプリコンパイルされたデータから開始し、新しい情報のコンパイルを開始しますafterポイントstdafx.hが含まれています。」これは重要であり、stdafx.hをファイルの最初の行として含める必要がある理由です。後でファイルに入れても機能しますが、そのデータは.pchにないため、#includeより前のものはすべて無視されます。 #includeがないということは、VSがファイル全体をスキャンして、コンパイル済みの開始位置を探し、それを見つけられないことを意味します...エラーを生成します。
コンパイル済みの情報を使用したくないファイルがある場合は、ファイルを選択してオーバーライドできます。例:
Visual Studioは、プリコンパイル済み情報を使用せず、含めるヘッダーを検索しません。
ファイルを選択したら、プロパティを右クリックして[C/C++ \プリコンパイル済みヘッダー]セクションに移動し、[プリコンパイル済みヘッダー]を[プリコンパイル済みヘッダーを使用しない]に設定します。構成(左上)が現在選択されているビルド。
「アクティブな」構成が常に自動的に選択されるとは限りません。したがって、非アクティブな構成のオプションを設定している可能性があるため、エラーが引き続き発生します;)