在WinDef.h的深处,这是来自分段记忆时代的遗物:
#define far
#define near
如果您尝试使用near或far作为变量名称,这显然会导致问题。任何干净的解决方法?其他然后重命名我的变量?
答案 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)。只是一个想法。