我想知道如何在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
我认为这对我的项目来说不是必需的。
那么如何手动禁止包含此文件(可能是递归)?
答案 0 :(得分:3)
在#define NOMINMAX
任何Windows标头之前,您可能需要#include
。
这是一个常见问题,他们添加了此宏来删除与stl版本冲突的min
和max
定义。
我会尝试为此挖掘一些MSDN参考。
答案 1 :(得分:1)
最有可能的是,您的开源项目并非设计为与“Windows”标题“混合”。
只是不要将#include <windows.h>
放入包含您的开源项目的相同文件中。 <windows.h>
包含的限制仅包含在绝对需要拥有它的文件中,并且理想情况下有一个或多个具有“仅限Windows”功能的文件,然后通过它自己的头文件提供给其余代码隔离任何Windows功能 - 如果您决定将系统移植到Windows以外的其他功能,这也会有所帮助。
(如果你在整个项目中继续使用Windows,还有很多其他的宏会迟早会回来咬你)