私はstdafx.hを含む多くのコードを参照してください。いいえ、私はではありませんは、事前にコンパイルされたヘッダーが欲しいです。そして私はにが必要なすべてのシステムヘッダーを自分で手動で取り込みます。その場合は、私がどこの場所に気をつけなければならない他の良い理由がありますかstdafx.h
?stdafx.h:いつ必要なのですか?
答えて
プリコンパイル済みヘッダーを使用しない場合は、標準インクルードファイルを使用する必要はありません。これにより、インクルードファイルを含むすべてのファイルのビルドが遅くなり、余分なものが含まれます必要。それを取り除き、必要なヘッダーだけを含めてください。
プレコンパイルされたヘッダーがなくても、stdafx.hはヘッダーインクルードとすべてのファイルに共通の定義をグループ化するので便利です。
もちろん、すべてのファイルでこれらの定義をすべて繰り返すこともできます。 stdafx.hは厳密には必要ではありません。
悪い習慣 - モジュールの依存関係をチェックできるように、必要なヘッダーを常に明示的にリストする必要があります。 – snemarch
stdafxには通常、すべてのファイルに共通のプラットフォーム固有の定義が含まれています。これはすべてのファイルの「依存性」です。すべてのファイルで定義を繰り返さないために使用します。これは良い習慣です。なぜなら、あなたはそれを1か所だけで行うからです。 – kgiannakakis
すべてのファイルがstdafxのすべてのヘッダーを実際に必要としない限り、すべてのファイルの依存関係ではありません。実際には、これはまれです(IME)。この方法でそれを使用するのは悪いことですが、悪い練習は最悪です – Patrick
stdafx.hは単なる別のヘッダーファイルです。落ちた場合は、それを含めずにプロジェクトから削除することは自由です。
しかし、stdafx.hのようなファイルは、プリコンパイルされたヘッダーが正しく動作するように、そして各ソースファイルにすべてのものを手動で含めるのが一般的です。
他にも言及したように、プリコンパイルされたヘッダーが必要ない場合、stdafx.hは本当に必要ありません。共通のインクルードをグループ化するだけでは、実際にはかなり悪い習慣です。
実際、プリコンパイルされたヘッダーを使用する場合でも、stdafx.h(またはプリコンパイルされたhなど)の後にプロセスが実際に必要とするヘッダーを、プリコンパイルされた#ifdefマジックと共に含めることをお勧めしますヘッダーを使用してPCHの使用をオフにします。
なぜですか?あなたのモジュールの依存関係をチェックするために。 PCHを無効にすることができるので、必要なモジュールが含まれているかどうかを知ることができ、.cppと.hファイルを解析することでモジュールの相互依存性をチェックするツールを書くことができます。
C + +パーサーを書くことは時間の巨大な利益です......... – Virus721
stdafx.hを使わずに(あまりにも嫌なことに)あらかじめコンパイルされたヘッダを使うことができます。私はVC++ 6.0にしかアクセスできませんでしたが、Project Settings | C/C++ | Precompiled Headersに行き、 "precompiled headerの自動使用"を選択しますが、 "compiled through"ボックスは空のままにしておきます。
私はこれが古いスレッドだと知っていますが、読者に私の意見を伝えたいと思いました。私は2017年にこれを見つけたので、私はここにいる唯一の人ではないと確信しています。
プレコンパイルされたヘッダーを使用する利点があります。これは、長年実践してきたために見落とされる可能性があります。 C++標準は大きく進化しました。あなたが必要とする可能性のある20個のファイルにベクトルを含めるのではなく、PCHファイルを使用し、コンパイラの作業量が少なくなければならず、それは誰にとっても幸せな顔になります。また、VERIFY、ASSERT、スマートクラスオブジェクトなど、共通のマクロをそこに配置することもできます。クラスヘッダーをそこに置かないでください。標準ライブラリや、私が言及したマクロのような多くの場所でグローバルに使う必要があるものは意味がありません。
は、iostream、string、vectorなど、必要なすべてのファイルに必要なヘッダーを含めることで、これをファイルにインラインで効果的にコンパイルします。 「Pre Compiled」ヘッダーを含めて、名前だけでそこに鐘が鳴るようにしてください。
- 1. stdAfx.hが見つからない
- 2. Visual Studio C++で、必要がないファイルでも「StdAfx.h」を含める必要があるのはなぜですか?
- 3. Visual Studio 2017は不必要にstdafx.hを再コンパイルし続けますか?
- 4. はない、オープンソースのファイル「stdafx.hを」
- 5. stdafx.hの使い方は?
- 6. モナド・トランスでリフティングが必要なのはいつですか?
- 7. ANTLR 4でEOFが必要なのはいつですか?
- 8. ノードコールバックでsetImmediateが必要なのはいつですか?
- 9. helibでブートストラップが必要なのはいつですか?
- 10. 1つのアンドロイドアプリで1つのサービスしか必要ないのですか?
- 11. Disposeはいつ必要ですか?
- 12. dynamic_castはいつ必要ですか?
- 13. "typename"キーワードはいつ必要ですか?
- 14. ScriptManager/ScriptManagerProxyはいつ必要ですか?
- 15. Queue.join()はいつ必要ですか?
- 16. データクラスはいつ必要ですか?
- 17. プレースホルダはいつ必要ですか?
- 18. 見つからないタイプのBeanが必要です。Springブート
- 19. 必要なTortoise SVNディレクトリの数はいくつですか?
- 20. Appium:インストールに必要なパッケージの数はいくつですか?
- 21. sun-jaxws.xml - いつ必要なのですか?
- 22. MSVCプリコンパイル済みヘッダー: "stdafx.h"を#includeする必要があるファイルはどれですか?
- 23. Reactで必要なモジュールが見つからない
- 24. 2つのセッションファクトリに必要な設定ファイルの数はいくつですか?
- 25. 互換性のない型 - 見つかったjava.util.Iterator(ロット)が必要ですが、java.util.Iterator(java.lang.String)が必要です
- 26. Apache Commons CLIで1つの引数しか必要ないのですか?
- 27. MTLVertexAttributeDescriptorsは必要ですか?彼らはなぜ必要なのですか?
- 28. ルビーはなぜ「細かい」必要はないのですか?
- 29. いくつかの説明が必要
- 30. 次のクエリでいくつかの提案が必要です
既にプリコンパイル済みヘッダーを使用している場合は、プロジェクトのプロパティC/C++およびプリコンパイル済みヘッダーに移動し、使用しないオプションを選択します。 – MirroredFate
NovisのStdAfx.h:http://www.cplusplus.com/articles/2z86b7Xj/ –