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

hyp*_*gic 11 c c++ winapi dos

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

#define far
#define near
Run Code Online (Sandbox Code Playgroud)

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

MSa*_*ers 22

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

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

  • +1纠正大多数其他回复的疯狂之处。 (2认同)

Joh*_*kin 8

包括windows.h以下内容后,取消定义您不想要的任何宏:

#include <windows.h>
#undef near
#undef far
Run Code Online (Sandbox Code Playgroud)