宏重新定义警告(Macro redefinition warnings)

2019-09-22 16:47发布

我迁移了Windows驱动程序项目从VS 2005VS 2012 。 许多宏重新定义警告生成VS 2012一样-

....

1>C:\WINDDK\7600.16385.1\inc\api\sal.h(707): warning C4005: '__format_string' : 
                                                                macro redefinition
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\sal.h(2860) : 
                                       see previous definition of '__format_string'

.....

它编译罚款sal.h随VS 2005,因为它不具备宏观__format_string等。 然而, sal.h随VS 2012具有这些宏。 因此,具有驾驶者之间的冲突sal.h和标准sal.h用VS 2012。

#define __format_string                            // With DDK
#define __format_string    _Printf_format_string_  // On VS 2012

因为它们在构建过程中使用我不能忽视的标准头。

....
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\string.h
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\crtdefs.h
....

有没有#if围绕这些宏在指令sal.h这样我就可以#undef它在2012年VS是否有解决有关此问题?

谢谢。

Answer 1:

那么,如果我理解你想要正确的东西,所有你需要做的就是添加

#ifdef __format_string 
#undef __format_string
#endif

之前的重新定义。



Answer 2:

你不应该包括在驱动程序代码的VS标准的头,它们并不是内核的使用。 仅使用WDK头。



文章来源: Macro redefinition warnings