宏重新定义警告

时间:2012-09-20 16:08:09

标签: c++ macros warnings visual-studio-2012 wdk

我正在将Windows驱动程序项目从VS 2005迁移到VS 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'

.....

它与VS 2005附带的sal.h编译正常,因为它没有宏__format_string和其他。但是,VS 2012附带的sal.h具有这些宏。因此,驾驶员的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指令,因此我可以在VS 2012中#undef它。是否有解决此问题的方法?

感谢。

2 个答案:

答案 0 :(得分:2)

如果我理解你想要什么,那么你需要做的就是添加

#ifdef __format_string 
#undef __format_string
#endif

重新定义之前。

答案 1 :(得分:2)

您不应在驱动程序代码中包含VS标准头文件,它们不适用于内核使用。仅使用WDK标头。