[解決済み] Visual Studioで "stdafx.h "は何に使うのですか?
質問
という名前のファイルは
stdafx.h
は、Visual Studio 2010でプロジェクトを開始すると、自動的に生成されます。クロスプラットフォームのC++ライブラリを作成する必要があるので、このヘッダーファイルは使用しない/できない。
とは
stdafx.h
は何に使うのですか?このヘッダーファイルは削除してもいいのでしょうか?
どのように解決するのですか?
すべてのC++コンパイラは、1つの深刻なパフォーマンス問題を抱えています。C++コードのコンパイルは、長く、遅いプロセスです。
C++ファイルの上に含まれるヘッダをコンパイルすることは 非常に 長く、遅いプロセスです。Windows APIやその他の大規模なAPIライブラリの一部を形成する巨大なヘッダ構造をコンパイルするのは 非常に , 非常に 長く、遅いプロセスです。Cppのソースファイル1つ1つに何度も何度も同じことをしなければならないのは、死活問題です。
これはWindowsに限ったことではなく、Windowsのような大規模なAPIに対してコンパイルする必要があるすべてのコンパイラが直面する古くからの問題です。
マイクロソフトのコンパイラは、この問題を改善するために プリコンパイルヘッダー . このトリックはかなり巧妙です。すべてのCPPファイルは、各Cppファイルの上に含まれるヘッダーファイルの連鎖に、潜在的かつ合法的にわずかながら異なる意味を与えることができますが(異なるマクロをあらかじめ#defineしておくとか、ヘッダーを異なる順序で含めるとか)、ほとんどの場合そうなることはないでしょう。ほとんどの場合、数十から数百のインクルードファイルがありますが、それらはすべて、アプリケーションでコンパイルされるすべてのCppファイルに対して同じ意味を持つように意図されています。
コンパイラは、すべてのCppファイルとその数十個のインクルードを毎回文字通りゼロからコンパイルし始める必要がなければ、時間を大幅に節約することができます。
このトリックは、すべてのコンパイルチェーンの出発点として、特別なヘッダーファイルを指定することから始まります。 stdafx.h 単に歴史的な理由によるものです。
stdafx.h ファイルに、API のための巨大なヘッダを適切な順番ですべてリストアップし、CPP ファイルの一番上にある
#include "stdafx.h"
意味のある内容の前に(唯一許されるのはコメントだけです)。
このような条件下では
ゼロから
にあるものをすべてコンパイルして保存した結果からコンパイルを開始します。
stdafx.h
.
この仕掛けは、マイクロソフトのコンパイラに特有のものでも、独自に開発したものでもないと思うのです。
マイクロソフト社のコンパイラの場合、プリコンパイルされたヘッダーの使用を制御する設定は、コンパイラへのコマンドライン引数で制御されます。
/Yu "stdafx.h"
. ご想像の通り
stdafx.h
ファイル名は単なる慣習であり、必要であれば変更することができます。
Visual Studio 2010では、この設定はGUIからCPPプロジェクトを右クリックして「Properties」を選択し、「Configuration Properties C/C++Precompiled Headers」に移動することで制御できます。Visual Studioの他のバージョンでは、GUIの位置は異なります。
プリコンパイルヘッダを無効にしても(あるいはプリコンパイルヘッダをサポートしないツールでプロジェクトを実行しても)、プログラムが不正になるわけではありません。
Windowsに依存しないライブラリを作成する場合は、簡単にコメントアウトまたは
#include
から
stdafx.h
ファイルを作成します。このファイル自体を削除する必要はありませんが、明らかに上記のプリコンパイルヘッダーの設定を無効にすることで、同様に削除することができます。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】Visual Studio。プロジェクトに既存のフォルダを追加する
-
[解決済み】Visual Studio 2012 Release Previewのインストール後に「LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt」エラーが発生する。
-
[解決済み] Visual Studio Express 2005はどこでダウンロードできますか?[クローズド]
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] Visual Studioで、既存のディレクトリツリーをプロジェクトに追加するにはどうすればよいですか?
-
[解決済み] Visual Studio の .suo と .user ファイルをソースコントロールに追加する必要がありますか?
-
[解決済み] Visual Studioでコマンドラインパラメータを使ったデバッグを行う
-
[解決済み] Visual Studioのコンパイルエラー "mismatch between processor architecture "を修正するにはどうしたらいいですか?
-
[解決済み】Visual Studioでソリューション(およびディレクトリ)の名前を変更する正しい方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] このモジュールのデバッグ情報にソース情報がない - PDBが正常にロードされました。
-
[解決済み] ERROR: ソースファイル " " を開くことができません。
-
[解決済み] ルナスエラー。パスワードが取得できません
-
[解決済み] Visual StudioプロジェクトでSDFファイルが自動作成される?
-
[解決済み] <bits/stdc++.h> を #include しない方が良いのでしょうか?
-
[解決済み】Visual Studioでコードを自動フォーマットする方法とは?
-
[解決済み】Visual Studioがシングルクリックでファイルを開かないようにするには?
-
[解決済み】Visual Studio IDEで空白文字の表示をオフにする方法
-
[解決済み】Visual Studioでドキュメント間を移動する際のCtrl + Tabの動作を変更する。
-
[解決済み】Visual Studio 2012、2013、2015、VS Codeで正規表現による検索と置換でキャプチャグループを参照する方法