有没有什么办法,使视觉C ++(9.0)产生约printf的格式化字符串不匹配的printf的参数的

2019-07-29 03:12发布

GCC很好地提供-Wformat ,以帮助找到的printf相关的错误。 有没有什么办法让MSVC相同的行为? 具体来说,我想编译器执行类型的参数检查的一些水平。 我明确地不希望使用C ++的iostream库因各种原因。 (我也不想使用升压格式)。

引用上述的源极,基本上-Wformat提供以下功能

检查调用printf和scanf等,以确保提供参数的适当指定的格式字符串类型,并在格式字符串指定的转换是有意义的。

我能找到微软最近到目前为止是这样的警告 ,其涉及使用%d为64 VS 32位版本。

Answer 1:

我相信这不是在Visual Studio(我会尽力找到这个引文)所支持的特性。 我所知道的最接近的是使用_Printf_format_string_ SAL注释 。



Answer 2:

不幸的是,没有办法在编译时产生这样的警告,但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-分析



Answer 3:

具体来说,我想编译器执行类型的参数检查的一些水平。

编译器喜欢默认在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?