0

オープンソースのコードベースを見ると、次のコードに出くわしました:

#include "StableHeaders.h"
#include "polygon.h"
#include "exception.h"
#include "vector.h"
...

現在、StableHeaders.h は、生成を強制するために「コントロール」cpp に含まれるプリコンパイル済みヘッダーです。いずれにせよ、プリコンパイル済みヘッダーの後に表示される 3 つのインクルードも StableHeaders.h ファイルに含まれています。私の質問は、プリコンパイル済みヘッダーをサポートしていないコンパイラでコード ベースがビルドされるように、これらのファイルが 2 回含まれているのでしょうか? とにかく、インクルードガード/ヘッダーキャッシングにより、複数のインクルードが冗長になると仮定しています...

EDITところで、stableheaders.hファイルにはwin32のチェックがあります(大まかに)ので、stableheaders.h内のインクルードがプリコンパイル済みヘッダーをサポートしないコンパイラーに含まれないと仮定します。

4

3 に答える 3

2

プリコンパイル済みヘッダーをサポートしないコンパイラは、(プリコンパイル済みファイルを使用するのではなく) StableHeaders.h をインクルードし、毎回再解析します。あなたが尋ねたように、それは問題を引き起こすことも、特定のコンパイラの問題を修正することもありません。おそらく開発中に時間の経過とともに発生した小さな「間違い」だと思います。

于 2009-07-29T12:56:29.957 に答える
0

とにかく、プリコンパイル済みヘッダーを保護し、それらを含める唯一の理由は速度です。プリコンパイル済みヘッダーを使用する理由は、コンパイル時間を短縮するためです。これは、プリコンパイル済みヘッダーの内容を含めてコンパイルすることで機能します。これを行うと、ソース ファイルの 75% でのみ使用されるヘッダーを含めることができます。プリコンパイル済みヘッダーがない場合よりも高速です。

ただし、他のプラットフォームが prepcompiled ヘッダーをサポートしていない場合は、このソース ファイルに必要なヘッダー ファイルのみを含めます。そのため、プリコンパイル済みヘッダーに一部のソース ファイルでのみ必要なインクルード ファイルが含まれている場合は、必要なヘッダー ファイルをインクルードしてコンパイルする方が迅速です。

于 2009-07-29T15:08:31.003 に答える
0

あなた自身が質問の質問に答えたと思います!プリコンパイル済みヘッダーはコンパイラの機能です。ガードが存在する場合、いずれの場合でも、ヘッダーが 2 回含まれることはありません。

于 2009-07-29T13:03:59.583 に答える