在VS2010中排除系统头文件

时间:2013-08-03 17:15:46

标签: c++ visual-studio-2010 compiler-construction

我想知道如何在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

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

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

2 个答案:

答案 0 :(得分:3)

#define NOMINMAX任何Windows标头之前,您可能需要#include

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

我会尝试为此挖掘一些MSDN参考。

答案 1 :(得分:1)

最有可能的是,您的开源项目并非设计为与“Windows”标题“混合”。

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

(如果你在整个项目中继续使用Windows,还有很多其他的宏会迟早会回来咬你)