6

Visual C++ プロジェクトのヘッダー ファイルにインクルード ガードを追加すると、次の警告とエラーが表示されます。

警告 C4603: '_MAPTEST_H': マクロが定義されていないか、プリコンパイル済みヘッダーの使用後に定義が異なります

ここで定義する代わりに、プリコンパイル済みヘッダーにマクロを追加します

.\MapTest.cpp(6) : プリコンパイル済みヘッダーの使用** // プリコンパイル済みヘッダー stdafx.h がこの行に含まれています

.\MapTest.cpp(186): 致命的なエラー C1020: 予期しない #endif

しかし、インクルード ガードの前にプリコンパイル済みヘッダーを追加しても、警告やエラーは発生しません。これの理由は何ですか?

4

2 に答える 2

18

私が考えることができる2つの問題:

  1. これによると、Visual C ++は、インクルードする行の前には何もコンパイルしないstdafx.hため、その行はファイルの最初の行である必要があります。マクロ定義の後に置くとスキップされるため、エラーが発生します。

  2. 先頭の下線と大文字(または二重先頭の下線)で始まる識別子は予約されているため、名前の競合が発生している可能性があります。詳細については、この回答を参照してください。

于 2010-05-31T06:36:41.010 に答える