32

Visual C ++ 6にあるサンプルプロジェクト(私のものではありません)があります。これをVisualStudio2008に変換しようとしています。

古いプロジェクトはプリコンパイル済みヘッダーを使用しています。今の質問は次のとおりです。

  1. プリコンパイル済みヘッダーとは何ですか?

  2. 古いプロジェクトはプリコンパイル済みヘッダーを使用しているためです。Visual Studio 2008(新しいプロジェクト)でも使用します。しかし、「stdafx.hを含めるのを忘れましたか」というエラーが表示されます。問題を解決するために、すべてのソースファイルに「stdafx.h」を含めます。それは完璧に機能しました。しかし、古いプロジェクトでは、すべてのファイルに「stdafx.h」が含まれていませんでしたか?次に、各ソースファイルに「stdafx.h」を含めることをオプトアウトするにはどうすればよいですか。すべてのソースファイルが「stdafx.h」で定義されたインクルードファイルを必要とするわけではないため、必要なのはごくわずかです。それはどのように行われますか?

編集: プリコンパイル済みヘッダーの使用から一部のファイルを除外するにはどうすればよいですか?

4

3 に答える 3

56

プリコンパイル済みヘッダーとは

多くの場合、C++ ソース ファイルには、外部ライブラリのヘッダーが含まれています。Windows では、 を含めますwindows.h。これらのヘッダー ファイルは非常に大きくなる可能性があり、処理に時間がかかります。C++ ファイルをコンパイルするたびに、コンパイラはこれらのヘッダー ファイルから数千行を読み取って処理する必要があります。ただし、外部ライブラリは変更されないため、これらのファイルを一度処理して結果を保存するだけで、多くの時間を節約できます。

プリコンパイル済みヘッダーは、後でコンパイラーが何度も使用できる中間形式に処理された一連のヘッダー ファイルです。

Visual C++ のプリコンパイル済みヘッダー

Visual C++ では#includestdafx.h. stdafx.pch次に、コンパイル中にプリコンパイル済みヘッダーを作成するようにコンパイラーに指示しますstdafx.cppが、これは includeのみを行いますstdafx.h。プリコンパイル済みヘッダーを別の.cppファイルで使用する場合stdafx.hは、最初のインクルード ファイルとしてインクルードし、プリコンパイル済みヘッダーに使用するようにコンパイラーに指示する必要stdafx.pchがあります。

インクルードしないというエラーが発生した場合はstdafx.h、その特定のソース ファイルに対してプリコンパイル済みヘッダーを使用しないようにコンパイラに指示する必要があります。(または、 を含めることができますstdafx.h。)

個々のソース ファイルのプリコンパイル済みヘッダー設定

Visual C++ では、プロジェクト全体および個々のファイルのコンパイラ設定を制御できます。個々のプロパティにアクセスするには、ソリューション エクスプローラーでソース ファイルを選択し、それを右クリックして、コンテキスト メニューから[プロパティ] を選択します。プリコンパイル済みヘッダーのオプションは、Configuration Properties => C/C++ => Precompiled Headersにあります。これらの設定を変更する場合、多くの場合、すべての構成 (例: DebugおよびRelease ) に対してそれを行いたいと思うでしょう。

プリコンパイル済みヘッダーを使用stdafx.pchしている場合、コンパイラーにプリコンパイル済みヘッダーを使用するように指示するプロジェクト全体の設定があります。にはstdafx.cpp、コンパイラに を生成するように指示する個別の設定がありstdafx.pch、含まれていないソース ファイルがある場合は、stdafx.hプリコンパイル済みヘッダーを使用しないように個別の設定を設定できます。

于 2009-08-18T12:41:13.770 に答える
5

コードをコンパイルするとき、コンパイラはすべての #included ヘッダーを調べて、.cpp ファイル内のコードをコンパイルする方法を知る必要があります。

大規模なプロジェクト (または MFC などのライブラリを使用するプロジェクト) では、これらのヘッダーが巨大になり、コンパイルに時間がかかることがあります。

これらのヘッダーのほとんどは (あったとしても) 頻繁に変更されることはないため、コンパイラーにそれらを「プリコンパイル」させることができます。コンパイラーはそれらを処理し、その状態をプリコンパイル済みヘッダーに保存します。次回コンパイルするときに、これらすべてのヘッダーを再度読み取ってコンパイルする必要がないため、はるかに高速です。

Visual Studio の要件の 1 つは、プリコンパイル済みヘッダーを使用する場合、それをプロジェクト内のすべてのファイルに含める必要があるということです。

プロジェクトが小さい場合、または頻繁にビルドしない場合は、「プリコンパイル済みヘッダー」オプションを無効にすることができます (プロジェクト設定で。これはプロジェクト全体に適用されます)。得られる唯一の効果は、コンパイルが遅くなる可能性があることです。または、オプションを有効のままにして、#include "stdafx.h" をすべてのファイルの最初のインクルードとして追加します。

于 2009-08-18T12:41:32.787 に答える
0
  1. MSDNを参照
  2. いつもの。すべての cpp ファイルに「stdafx.h」を含める必要があります。要点は、それらがプリコンパイルされていることであり、それらのすべてが具体的なファイルで使用されているわけではないことを心配する必要はありません。
于 2009-08-18T12:42:42.867 に答える