14

在 WinDef.h 的深处,有一个分段内存时代的遗物:

#define far
#define near

如果您尝试使用 near 或 far 作为变量名,这显然会导致问题。任何干净的解决方法?其他然后重命名我的变量?

4

5 回答 5

27

与其他人的说法相反,您可以安全地取消定义它们。原因是它们只是宏的。它们只影响定义和未定义之间的预处理器。在您的情况下,这将是从 windows.h 的早期到 windows.h 的最后一行。如果您需要额外的 windows 标头,您可以在 windows.h 之后和 #undef 之前包含它们。在您的代码中,预处理器只会按预期保持符号不变。

关于旧代码的评论是无关紧要的。该代码将在一个单独的库中,独立编译。只有在链接时,当宏早已不存在时,它们才会被连接。

于 2008-09-23T07:23:55.580 回答
8

在包括以下内容后取消定义您不想要的任何宏windows.h

#include <windows.h>
#undef near
#undef far
于 2008-09-23T02:18:08.623 回答
4

也许:

#undef near
#undef far

虽然可能很危险...

于 2008-09-23T02:15:50.500 回答
1

您可能不希望到处都未定义近处和远处。但是当您需要使用变量名时,您可以使用以下内容在本地取消定义宏,并在完成后将其添加回来。

#pragma push_macro("near")
#undef near
//your code here.
#pragma pop_macro ("near")
于 2008-09-23T03:02:48.873 回答
-2

最好不要。它们被定义为与旧代码向后兼容——如果你以某种方式摆脱了它们,然后需要使用一些旧代码,你就会被破坏。

于 2008-09-23T02:16:36.473 回答