是否有一种干净的方法可以阻止windows.h创建一个近距离的& amp;远宏?

时间:2008-09-23 02:14:50

标签: c++ c winapi dos

在WinDef.h的深处,这是来自分段记忆时代的遗物:

#define far
#define near

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

6 个答案:

答案 0 :(得分:21)

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

关于旧代码的评论无关紧要。该代码将在一个单独的库中,独立编译。只有在链接时才会连接这些,当宏已经过去了。

答案 1 :(得分:8)

在包含windows.h

之后,取消定义您不想要的任何宏
#include <windows.h>
#undef near
#undef far

答案 2 :(得分:3)

也许:

#undef near
#undef far

虽然可能很危险......

答案 3 :(得分:1)

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

#pragma push_macro("near")
#undef near
//your code here.
#pragma pop_macro ("near")

答案 4 :(得分:-1)

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

答案 5 :(得分:-2)

有人可能会说“近”和“远”并不是非常具有描述性的变量名称。您是否考虑过简单地在变量名中提供其他详细信息以解决冲突(即nearest_match,furthest_match)。只是一个想法。