1

我想知道如何在VS2010中排除指定的系统头文件,这是一个模棱两可的问题。

在我的项目中,我使用了一个开源项目。其中一个cpp文件调用

std::something::max()

其中 max 是某事中的一种方法。

但是,max 也在系统头文件“minwindef.h”中定义,在我的例子中位于 \Windows Kits\8.0\shared\minwidef.h

#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

我认为这对我的项目来说不是必需的。

那么如何手动禁止包含此文件(可能是递归的)?

4

2 回答 2

3

您可能想要#define NOMINMAX#includeing 任何 Windows 标头之前。

这是一个常见的问题,他们添加了这个宏来删除minmaxstl 版本冲突的定义。

我将尝试为此挖掘一些 MSDN 参考资料。

于 2013-08-03T17:21:43.500 回答
1

最有可能的是,您的开源项目并非旨在与“windows”标题“混合”。

只是不要#include <windows.h>对包含您的开源项目的相同文件进行操作。将包含的限制<windows.h>仅包含在绝对需要的文件中,并且理想情况下具有一个或多个具有“仅限 Windows”功能的文件,然后通过其自己的标头将其提供给其余代码,隔离任何 Windows 功能- 如果您决定将系统移植到 Windows 以外的其他设备,这也会有所帮助。

(如果你继续在你的整个项目中包含 Windows,还有一大堆其他的宏迟早会回来咬你)

于 2013-08-03T17:24:23.530 回答