宏重新定义警告

Macro redefinition warnings

本文关键字:定义 警告 新定义      更新时间:2023-10-16

我正在将一个windows驱动程序项目从VS 2005迁移到VS 2012。许多宏重新定义警告在VS 2012上生成,如-

....
1>C:WINDDK7600.16385.1incapisal.h(707): warning C4005: '__format_string' : 
macro redefinition
1>          c:program files (x86)microsoft visual studio 11.0vcincludesal.h(2860) : 
see previous definition of '__format_string'
.....

它使用VS 2005附带的sal.h编译得很好,因为它没有宏__format_string和其他宏。但是,VS 2012附带的sal.h具有这些宏。因此在具有VS 2012的驾驶员的CCD_ 7和标准CCD_。

#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.0VCincludestring.h
1> Note: including file:  C:Program Files (x86)Microsoft Visual Studio 11.0VCincludecrtdefs.h
....

sal.h中,这些宏周围没有#if指令,因此我可以在VS 2012中#undef它。这个问题有什么解决办法吗?

谢谢。

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

#ifdef __format_string 
#undef __format_string
#endif

在重新定义之前。

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