C++ 修复C+中的宏重新定义+;

C++ 修复C+中的宏重新定义+;,c++,visual-studio-2010,macros,visual-studio-macros,C++,Visual Studio 2010,Macros,Visual Studio Macros,因为intsafe.h和stdint.h都定义了INT8\u MIN。因此,VS2010会生成一条警告,说明: 1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdint.h(72): warning C4005: 'INT8_MIN' : macro redefinition 1> C:\Program Files (x86)\Microsoft SDKs\Windows\

因为
intsafe.h
stdint.h
都定义了
INT8\u MIN
。因此,VS2010会生成一条警告,说明:

    1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdint.h(72): warning C4005: 'INT8_MIN' : macro redefinition
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\intsafe.h(144) : see previous definition of 'INT8_MIN'

有没有办法修复VS2010中的警告。

为了简单地消除消息,您可以添加行

#pragma warning (disable : 4005)
在您的第一个
#include
语句之前


但这并不意味着你不应该听从警告。查看您是否可以不使用这两个头文件中的一个,如果不能,请非常确定您的程序正在使用哪个定义。

显然,这是VS2010中的一个错误。通常可以避免使用stdint.h,但在MFC应用程序中,基本上不可能在任何其他代码中不使用stdint.h

我只是在抱怨的文件顶部这样做:

#pragma warning (push)
#pragma warning (disable : 4005)
#include <intsafe.h>
#include <stdint.h>
#pragma warning (pop)
#pragma警告(推送)
#杂注警告(禁用:4005)
#包括
#包括
#布拉格警告(pop)

可以说,它让这些标题“不碍事”,让你可以继续一天的工作。

不要同时包含这两个文件,或者在包含第二个文件之前取消对其的定义。您将遇到的问题是,如果它们的定义不相同。以下是两个文件中的定义:C:\Program files(x86)\Microsoft Visual Studio 10.0\VC\include\stdint.h(76):\define INT8\u MAX 0x7f C:\Program files(x86)\Microsoft SDK\Windows\v7.0A\include\intsafe.h(167)定义了In8xMax 127I8i在构建C++ ATL COM DLL时得到类似警告,在删除<代码> >之后,我没有得到任何警告,包括“<代码> > STDAFX .H./Cuff>文件,以及将该表达式放置在Stdit.h或主头中,将其放入程序中,在使用
#include“stdint.h”
或“#include”instate.h”之前,pragma应位于其中第一个#include之前。此外,不要忘记使用push/pop pragma,以便您完全按照自己的意愿处理警告异常(请参见:)重复的定义是相同的,但不完全相同,这会导致警告。忽略这些警告是安全的。我把它放在这个有问题的项目的stdafx.h文件中,以超过警告。