宏重新定义警告
Macro redefinition warnings
我正在将一个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标头。
相关文章:
- 为什么我会收到警告,指出函数已使用但未定义,以及已定义但未使用?
- 在 eclipse 中,将宏重定义视为错误而不是警告
- G++ 编译器未为未定义的方法生成错误/警告
- 如何禁止在 g++ 中使用但从未定义警告的内联函数
- XCode 警告"此处需要实例化变量'Singleton:<Foo>:_instance',但没有可用的定义
- C++ 添加编译器警告,以错误使用自定义打印/日志功能
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 链接时突然收到maxrregcount警告和未定义的引用错误
- 避免对仅在源文件中定义的类发出弱 vtable 警告
- 警告定义朋友操作员在名称空间内声明
- 为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?
- 是否有 GCC 标志来发出有关作用域内相同变量重定义的警告?
- 警告 C4661:没有为显式模板实例化请求提供合适的定义
- 通常如何避免重定义警告?
- 关于静态模板化 constexpr 的 Clang 警告(未定义内联函数)
- C 17 GCC编译器为什么会发出有关未定义的警告
- IntelliSense函数定义未找到QT信号的警告
- 宏重新定义警告
- 链接器不指出错误;多个定义警告指向同一行
- c++模板自定义警告