5

私はヘッダが「の#include 『stdafx.hを』をやっているとはい、私はそれらをオフにすることができます知っている。しかし、それは私の質問はありませんプリコンパイルを理解。Visual Studio C++で、必要がないファイルでも「StdAfx.h」を含める必要があるのはなぜですか?

あなたがプリコンパイル済みヘッダーを使用している場合は、Visual C++が必要ですevery cppファイルに#StdAfx.hをインクルードします。StdAfx.hのヘッダーを使用していないファイルも含めて、StdAfx.hを1つのファイルにインクルードするのを忘れた場合はエラーです。明白なアプローチは、「StdAfx.hをインクルードするとそのファイルが使用されますが、インクルードするのを忘れてしまった場合、ヘッダーファイルはインクルードされません」VC++がなぜあなたに必要なのか理解できません必要でないときはStdAfx.hをインクルードしてください。通常のヘッダファイルのように扱う方が簡単なようです。

これが必要な理由はありますか?

+0

コンパイルされたヘッダーの全体のポイントは、コンパイル時間を短縮することです。追加のチェックが行われると、コンパイル時間が長くなり、プリコンパイル済みヘッダーの唯一のメリットが無駄になります。 –

+0

なぜそれを言うのですか? VC++は "最初の行が#include"のstdafxの場合にのみ行うことができます。h "はそこにそれらのシンボルをコピーしますが、それ以外は何もしません"。マイクロソフトがそのようにしてより簡単にやっているように見え、ユーザーにとってもより明らかになったようだ。 – user2543623

+0

実際、すべてのファイルに「StdAfx.h」を必要としない* *では、実際にはコンパイル時間が改善されます。プリコンパイルされたシンボルを必要としない.cppファイルにコピーする必要はありません。 – user2543623

答えて

7

プロジェクトのデフォルトは「プリコンパイル済みヘッダーを使用」です。必要に応じて、個々のファイルを「プリコンパイル済みヘッダーを使用しない」に設定することができます。実際に

stdafx.cpp自体は、プロジェクトのデフォルトとは異なるオプションを持っています

enter image description here

この構成は、「あなたは、コンパイルが完了したときに停止する、このファイル(stdafx.cppを)コンパイルを開始されると言っている何「そして.PCHファイルなどとしてコンパイル済みの情報を保存し、」stdafx.hを含んでいる文は、Visual Studioは、それが使用可能であるように、また、最初にこのファイルをコンパイルするのに十分なスマートです

プロジェクトのデフォルトは次のとおりです。

enter image description here

この構成は、「各コンパイル済みのファイルについて、指定された.PCHでプリコンパイルされたデータで始まり、ポイントSTDAFX.Hが含まれた後、新たな情報をコンパイルを開始。」と言っていることが重要なのは何とその理由stdafx.hはファイルの最初の行に含める必要があります。後でファイルに入れても機能しますが、そのデータが.pchに含まれないため、#includeが無視される前は何も無視されます。 #includeが指定されていないと、VSはファイル全体をスキャンしてコンパイル済みの開始位置を探し、見つからない...エラーを生成します。

コンパイル済みの情報を使用したくないファイルがある場合は、ファイルを選択して上書きすることができます。例:

enter image description here

Visual Studioはコンパイル済みの情報を使用することはありませんし、インクルードするヘッダを探しません。

+0

技術的には、これは彼の質問の最初の文で、これを述べたので、技術的には、** OPの質問に答えない** _yes、私はそれらをオフにすることができることを知っている。しかしそれは私の質問ではありません._ –

+2

私は知っている、私は編集作業中です。私は自分のコンピュータの前にいなかったし、いくつかのスクリーンショットを望んでいた。 Plus OPはあなたが*個別に*オフにすることができないことを知りません。 OPを引用するには:[Visual C++には、すべての* cppファイルに#StdAfx.hをインクルードする必要があります。 –

+1

@AlgirdasPreidžius元のポスターは、プロジェクト全体ではなく、特定のファイルに対してオフにできることを知っていると仮定しています。私の経験から、ほとんどの人がそのことやその方法を知らないことがわかります。私は十年以上にわたりツールを使用してきた高度な学位を持つ人々と協力し、彼らはそれを知らない。彼がそれを知っているかどうかは明らかではない。マークは有用な情報を与えました。本当の答えは、 "マイクロソフトがそう言ったからです。" –

7

マークスの回答にちょうど追加されました。実際には、すべてのプロジェクトソースファイルに手動でstdafx.hを含める必要はありません。プロジェクトオプションForced Include Filesenter image description here

このようにstdafx.hがすべてのソースに自動的に含まれます。

+1

良い点は、プリコンパイルされたヘッダが最初にリストされている複数の強制インクルードがある場合は、ソースファイルの最初のものと同じ理由で、....が無視され、 .pchファイル内の状態。 –

関連する問題