GCC很好地提供-Wformat ,以帮助找到的printf相关的错误。 有没有什么办法让MSVC相同的行为? 具体来说,我想编译器执行类型的参数检查的一些水平。 我明确地不希望使用C ++的iostream库因各种原因。 (我也不想使用升压格式)。
引用上述的源极,基本上-Wformat提供以下功能
检查调用printf和scanf等,以确保提供参数的适当指定的格式字符串类型,并在格式字符串指定的转换是有意义的。
我能找到微软最近到目前为止是这样的警告 ,其涉及使用%d
为64 VS 32位版本。
我相信这不是在Visual Studio(我会尽力找到这个引文)所支持的特性。 我所知道的最接近的是使用_Printf_format_string_
SAL注释 。
不幸的是,没有办法在编译时产生这样的警告,但VC ++代码分析工具将生成与不匹配的参数类printf函数警告消息。
查看/analyze
选项,在VC ++和http://msdn.microsoft.com/en-us/library/vstudio/ms173498.aspx的更多细节。
作为一个侧面说明,人们一直在抱怨这个,也许微软会在未来做一些事情: https://connect.microsoft.com/VisualStudio/feedback/details/799869/detection-of-format-string-errors-应待部分的最常规的C-编译INSTEAD-OF-分析
具体来说,我想编译器执行类型的参数检查的一些水平。
编译器喜欢默认在C ++代码做类型检查。 不幸的是你想用C设施不提供这种能力。
只需使用IO流和编译器会比当不匹配的类型发出警告:它会发出错误并不能完全编译代码!
文章来源: Is there any way to make visual C++ (9.0) generate warnings about printf format strings not matching type of printf's args?