Visual Studio で「stdafx.h」は何に使用されますか? 質問する

Visual Studio で「stdafx.h」は何に使用されますか? 質問する

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

stdafx.hに使用されますか? このヘッダー ファイルを削除しても問題ありませんか?

ベストアンサー1

すべての C++ コンパイラには、対処しなければならない重大なパフォーマンス問題が 1 つあります。C++ コードのコンパイルは、時間がかかり、時間のかかるプロセスです。

C++ ファイルに含まれるヘッダーをコンパイルするのは、非常に長くて時間のかかるプロセスです。Windows API やその他の大規模な API ライブラリの一部である巨大なヘッダー構造をコンパイルするのは、非常に長くて時間のかかるプロセスです。すべての Cpp ソース ファイルに対してこれを何度も何度も実行しなければならないのは、死を告げる鐘を鳴らすようなものです。

これは Windows に特有のものではなく、Windows のような大規模な API に対してコンパイルする必要があるすべてのコンパイラが直面している古い問題です。

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

毎回、すべての Cpp ファイルとその数十のインクルードを文字通りゼロからコンパイルする必要がなければ、コンパイラーは大幅な時間の節約を実現できます。

このトリックは、すべてのコンパイル チェーンの開始点として特別なヘッダー ファイルを指定するというものです。これはいわゆる「プリコンパイル済みヘッダー」ファイルで、歴史的な理由からstdafx.hという名前のファイルであることが一般的です。

stdafx.h ファイルに、API の巨大なヘッダーをすべて適切な順序でリストし、各 CPP ファイルの先頭に、#include "stdafx.h"意味のあるコンテンツの前に , を記述します (この前に記述できるのはコメントのみです)。

このような状況では、コンパイラは最初から始めるのではなく、 内のすべてのものをコンパイルした既に保存された結果からコンパイルを開始しますstdafx.h

このトリックは Microsoft コンパイラに特有のものではないと思いますし、独自の開発でもないと思います。

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

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

プリコンパイル済みヘッダーを無効にした場合 (またはプリコンパイル済みヘッダーをサポートしていないツールでプロジェクトを実行した場合)、プログラムが違法になるわけではなく、単にツールが毎回すべてを最初からコンパイルすることを意味するだけであることに注意してください。

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

おすすめ記事