是否有一种干净的方法可以阻止windows.h创建一个近距离的& amp;远宏?
题
在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")
最好不要。它们被定义为向后兼容旧代码 - 如果你以某种方式摆脱它们,然后需要使用一些旧代码,你就会被打破。
有人可能会争辩说“接近”和“远”不是非常具有描述性的变量名称。您是否考虑过简单地在变量名中提供其他详细信息以解决冲突(即nearest_match,furthest_match)。只是一个想法。
不隶属于 StackOverflow