【发布时间】:2011-07-28 22:30:49
【问题描述】:
我所说的是找到一种方法来避免<windows.h> 中的宏污染我正在编写的任何项目。
摘自windows.h:
#ifdef UNICODE
#define LoadImage LoadImageW
#else
#define LoadImage LoadImageA
#endif // !UNICODE
#ifdef UNICODE
#define GetMessage GetMessageW
#else
#define GetMessage GetMessageA
#endif // !UNICODE
大多数宏(超过 99%)我都可以接受,但其中一些我无法避免。
我的想法是,因为我总是在我的特定框架中限定函数调用,例如ImageTool::LoadImage,Visual Studio 应该有足够的线索表明我没有引用 Windows API,它们都在根命名空间中,即 ::LoadImage。但是 MACRO 系统似乎没有那么聪明。
是否有编译器或预处理器选项可以启用它?
【问题讨论】:
-
在包含
<windows.h>之前尝试定义WIN32_LEAN_AND_MEAN。 -
@Kerrek SB:谢谢,我试过了。没用。
-
不确定问题出在哪里。您不应该在自己的代码中使用同名的宏。您应该将所有自己的代码放在自己的命名空间中,以确保与(不幸的是)全局命名空间中的 Windows 标头定义的函数没有冲突。
-
我们更喜欢全限定名称而不喜欢使用命名空间 xxx...
-
@Cody:
<windows.h>是 Microsoft 包含文件。更糟糕的是,我刚刚发现它包含在框架头文件中 - 我不妨修改框架头文件(或<windows.h>)以满足我的需要。
标签: c++ visual-studio macros