web-dev-qa-db-ja.com

Visual Studioで "stdafx.h"は何に使用されていますか?

Visual Studio 2010でプロジェクトを開始すると、stdafx.hという名前のファイルが自動的に生成されます。クロスプラットフォームのC++ライブラリを作成する必要があるため、このヘッダーファイルを使用しないでください。

stdafx.hは何のために使われていますか?このヘッダファイルを削除しても大丈夫ですか?

468
prosseek

すべてのC++コンパイラには、対処すべき1つの重大なパフォーマンス問題があります。 C++コードのコンパイルには時間がかかります。

C++ファイルの上部に含まれるヘッダーのコンパイルは、very長くて遅いプロセスです。 Windows APIおよび他の大きなAPIライブラリの一部を形成する巨大なヘッダー構造のコンパイルは、veryvery長い、遅いプロセスです。 。すべてのCppソースファイルに対して何度も何度も繰り返し行う必要があります。

これはWindowsに固有のものではありませんが、Windowsのような大きなAPIに対してコンパイルする必要があるすべてのコンパイラが直面する古い問題です。

Microsoftコンパイラーは、プリコンパイル済みヘッダーと呼ばれる簡単なトリックでこの問題を改善できます。トリックは非常に巧妙です:ただし、すべてのCPPファイルは、各Cppファイルの先頭に含まれるヘッダーファイルのチェーンにわずかに異なる意味を潜在的にかつ合法的に与えることができます(インクルードの前に異なるマクロを#define'dヘッダーを異なる順序で含めることで)、ほとんどの場合そうではありません。ほとんどの場合、数十または数百のインクルードファイルがありますが、これらはすべて、アプリケーションでコンパイルされるすべてのCppファイルに対して同じ意味を持つことを意図しています。

コンパイラは、すべてのCppファイルとその数十個のインクルードを文字通り常にゼロからコンパイルする必要がない場合、時間を大幅に節約できます。

トリックは、すべてのコンパイルチェーンの開始点として特別なヘッダーファイル、いわゆる「プリコンパイル済みヘッダー」ファイルを指定することで構成されます。このファイルは、一般的にstdafx.h単に歴史的な理由のため。

適切な順序で、stdafx.hファイルにAPIのすべての大きな巨大なヘッダーをリストし、意味のあるコンテンツの前に#include "stdafx.h"で最上部の各CPPファイルを開始するだけです以前に許可されているのはコメントのみです)。

これらの条件下では、コンパイラーはscratchから開始する代わりに、stdafx.h内のすべてをコンパイルした既に保存された結果からコンパイルを開始します。

このトリックはMicrosoftコンパイラーに固有のものではないと思いますし、オリジナルの開発だとは思いません。

Microsoftコンパイラーの場合、プリコンパイル済みヘッダーの使用を制御する設定は、コンパイラーへのコマンド行引数/Yu "stdafx.h"によって制御されます。ご想像のとおり、stdafx.hファイル名の使用は単なる規則です。必要に応じて名前を変更できます。

Visual Studio 2010では、この設定はGUIからCPPプロジェクトを右クリックして[プロパティ]を選択し、[構成プロパティ\ C/C++ \プリコンパイル済みヘッダー]に移動して制御します。 Visual Studioの他のバージョンでは、GUIの場所が異なります。

プリコンパイル済みヘッダーを無効にする(またはそれらをサポートしないツールを使用してプロジェクトを実行する)場合、プログラムが違法になることはありません。これは単に、ツールが毎回すべてをゼロからコンパイルすることを意味します。

Windowsに依存しないライブラリを作成している場合は、stdafx.hファイルから#includesを簡単にコメントアウトまたは削除できます。ファイル自体を削除する必要はありませんが、上記のプリコンパイルヘッダー設定を無効にすることで、明らかに削除することもできます。

798
Euro Micelli

これは「プリコンパイル済みヘッダーファイル」です。stdafx.hに含まれるヘッダーは、後続のコンパイル時に時間を節約するために前処理されています。あなたはそれについてもっと読むことができます ここMSDNで -

クロスプラットフォームアプリケーションを構築している場合は、プロジェクトを作成するときに[プロジェクトを空にする]を選択すると、Visual Studioはプロジェクトにファイルをまったく配置しません。

43
casablanca

"Stdafx.h"はプリコンパイル済みヘッダーです。標準のシステムインクルードファイルおよびプロジェクト固有のインクルードファイル用のインクルードファイルで、頻繁に使用されることはほとんどありませんが、コンパイル時間と不要な処理を削減します。

プリコンパイル済みヘッダーstdafx.hは、Microsoft Visual Studioで基本的に使用され、一度コンパイルされたファイルを最初からコンパイルする必要がないことをコンパイラーに知らせます。あなたはそれについてもっと読むことができます

http://www.cplusplus.com/articles/1TUq5Di1/ /

https://docs.Microsoft.com/ja-jp/cpp/ide/precompiled-header-files?view=vs-2017

1
Akash das