11

いつものように、自分で理解できない何かで頭が混乱しているときは、皆さんに助けを求めます :)

今回は、なぜ stdafx.h がこのように機能するのか疑問に思っていました。私の理解では、それは2つのことを行います:

  • 私たちが(?) 使用する可能性があり、めったに変更されない標準ヘッダーが含まれて います
  • コードがプリコンパイルされなくなったときのコンパイラ ブックマークとして機能します。

さて、これら 2 つのことは、私には 2 つの非常に異なるタスクのように思えますが、なぜそれらを処理するために 2 つの別々の手順を実行しなかったのでしょうか? #pragma-command でブックマーク処理を行い、必要に応じて windows.h の長い行のヘッダー ファイルを使用して、頻繁に使用されるヘッダーをインクルードするのが合理的だと思われます...ポイント: stdafx.h を介して頻繁に使用されるヘッダーをインクルードする必要があるのはなぜですか? 個人的には、よく使用するヘッダーで、まだ独自のインクルードを行っていないものを認識していませんが、これらのヘッダーは .dll の生成に必要なのでしょうか?

事前にThx

4

4 に答える 4

6

stdafx.h は、Visual Studio にプリコンパイル済みヘッダーを実行させる 1 つの方法です。これは、簡単に使用でき、自動生成が容易なアプローチであり、小規模なアプリには適していますが、大規模で複雑なアプリでは問題を引き起こす可能性があります。単一のヘッダー ファイルの使用を効果的に促進するという事実が、コンポーネント間の結合を引き起こす可能性があります。それ以外は独立しています。システム ヘッダーのみに使用する場合は問題ない傾向がありますが、プロジェクトのサイズと複雑さが増すにつれて、そこに他のヘッダーを挿入したくなり、突然ヘッダー ファイルを変更すると、プロジェクト内のすべてが再コンパイルされます。

ここを参照してください:stdafx.h を必要とせずに VC++ でプリコンパイル済みヘッダーを使用する方法はありますか? 別のアプローチの詳細については。

于 2008-12-17T08:08:56.457 に答える
4

「stdafx.h」の使用は強制されません。プロジェクトのプロパティで (またはプロジェクトの作成時に) [プリコンパイル済みヘッダーを使用する] をオフにすると、stdafx.hもう必要ありません。

コンパイラは、コンパイル時間を短縮するために、ファイル内で最も使用されるヘッダーを個別にプリコンパイルできるようにする手がかりとしてこれを使用し.pchます (毎回コンパイルする必要はありません)。

于 2008-12-17T07:37:47.890 に答える
1

その中のものは常に最初にコンパイルされるため、コンパイル時間を短縮します(以下の引用の詳細を参照):

stdafx.h は、頻繁に使用されるがほとんど変更されない、標準システムおよびプロジェクト固有の両方のインクルード ファイルを記述するファイルです。

互換性のあるコンパイラは、このファイルをプリコンパイルして、全体的なコンパイル時間を短縮します。Visual C++ は #include "stdafx.h"、コンパイル オプション /Yu'stdafx.h' が (既定で) オフになっていない限り、ソース ファイル内の の前に何もコンパイルしません。その行までのソース内のすべてのコードが既にコンパイルされていることを前提としています。

于 2008-12-17T07:42:22.140 に答える
-5

長いコンパイルを減らすのに役立ちます。

于 2008-12-17T07:37:20.187 に答える