在 WinDef.h 的深处,有一个分段内存时代的遗物:
#define far
#define near
如果您尝试使用 near 或 far 作为变量名,这显然会导致问题。任何干净的解决方法?其他然后重命名我的变量?
与其他人的说法相反,您可以安全地取消定义它们。原因是它们只是宏的。它们只影响定义和未定义之间的预处理器。在您的情况下,这将是从 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")
最好不要。它们被定义为与旧代码向后兼容——如果你以某种方式摆脱了它们,然后需要使用一些旧代码,你就会被破坏。