是否有一种干净的方法来阻止windows.h创建近远宏?

在WinDef.h的内心深处,有分段记忆时代的遗物:

#define far #define near 

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

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

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

包括windows.h后, windows.h定义您不想要的任何宏:

 #include  #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)。 只是一个想法。