3

处理 Windows 标头中侵入性 #defines 的最佳方法是什么?当我真的需要定义具有相同名称的符号时,它们往往会发出错误,无论它是否在命名空间中。我知道使用 WIN32_LEAN_AND_MEAN 可以避免一些定义,但不是全部。在这种特殊情况下,我在 WinNT.h#6478 中定义了一个“DELETE”——并且有很多像这样的非常通用的关键字。

我的直接想法是在声明我的常量之前做一个#undef,但这是一个非常不雅的解决方案。我不能轻易地重命名我的常量,因为它们被直接翻译成文本字符串,我需要它们完全是现在的样子。

想到的其他定义是 windowsx.h 中的 GetFirstChild/GetNextSibling ...真的吗?

4

3 回答 3

1

实际上,我认为最干净的解决方案是提供一个包装标头,它会#include <windows.h>#undef所有妨碍您的宏。然后,您将包含此包装器标头而不是windows.h.

于 2013-04-10T08:09:27.477 回答
0

显而易见的解决方案是不包括<windows.h>. 应该有非常非常少的模块需要它,在这些模块中,您只需要避免<windows.h>定义的符号。这应该不会太难,因为这些将是低级包装器,不需要包含您的应用程序的任何内容。

于 2013-04-10T08:16:53.023 回答
0

<windows.h>我的解决方案是“除非绝对必要,否则不要包括在内”。通常,无论如何,您都希望将系统依赖项隔离到一小组代码中,因此无论是否包含<windows.h>在文件中都是一个坏主意。

于 2013-04-10T08:23:03.507 回答