より大きなプロジェクト (Mozilla Firefox 用の ff ActiveX プラグイン) の一部として、次のコード スニペットがあります。
if (CombineRgn(hrgnClip, hrgnClip, hRGN, RGN_AND) != ERROR)
{
::InvalidateRgn(m_hWndParent, hrgnClip, fErase);
}
VS2012 でビルドすると、「エラー C2065: 'エラー' : 宣言されていない識別子」エラーが wingdi.h で次のように定義されます。
...
/* Region Flags */
#define ERROR 0 // it wont build when this macro is used
#define NULLREGION 1 // it builds when this macro is used
#define SIMPLEREGION 2
#define COMPLEXREGION 3
#define RGN_ERROR ERROR
...
奇妙なことに、上記のifステートメントで ERROR (正常にビルドされるかどうかを確認するためだけに) を NULLREGION または SIMPLEREGION (同じファイル内のマクロで、問題のあるマクロの 2 行下) に置き換えると、コードは正常にビルドされます。ERROR を使用すると、コードがビルドされません。上記で定義された ERROR マクロが、Visual Studio によって何らかのキーワードや別のマクロなどによってマスクされる可能性はありますか?