WinDef.hの奥深くには、セグメント化されたメモリ時代のこの遺物があります。
#define far
#define near
これは、変数名の近くまたは遠くを使用しようとすると、明らかに問題を引き起こします。クリーンな回避策はありますか?それ以外の場合、変数の名前を変更しますか?
他の人からの主張に反して、それらを安全に未定義にすることができます。その理由は、それらが単なるマクロだからです。それらは、定義と未定義の間のプリプロセッサにのみ影響します。あなたの場合、それはwindows.hの早い段階からwindows.hの最後の行までになります。追加の Windows ヘッダーが必要な場合は、windows.h の後、#undef の前に含めます。コードでは、意図したとおり、プリプロセッサは単にシンボルを変更しないままにします。
古いコードに関するコメントは関係ありません。そのコードは別のライブラリにあり、個別にコンパイルされます。これらが接続されるのは、リンク時のみで、マクロがなくなって久しいからです。
以下を含めた後、不要なマクロの定義を解除しますwindows.h
。
#include <windows.h>
#undef near
#undef far
多分:
#undef near
#undef far
でも危険かもしれない...
おそらくどこでも未定義の近くと遠くを望まないでしょう。ただし、変数名を使用する必要がある場合は、次を使用してマクロをローカルで定義解除し、完了したら元に戻すことができます。
#pragma push_macro("near")
#undef near
//your code here.
#pragma pop_macro ("near")
しないのが最善です。それらは、古いコードとの下位互換性のために定義されています-何らかの方法でそれらを取り除き、後でその古いコードの一部を使用する必要がある場合は、壊れてしまいます。