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

StackOverflow https://stackoverflow.com/questions/118774

  •  02-07-2019
  •  | 
  •  

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top