4

Gcc 很好地提供了-Wformat来帮助查找与 printf 相关的错误。有没有办法在 MSVC 中获得相同的行为?具体来说,我希望编译器对参数进行某种级别的类型检查。由于各种原因,我明确不想使用 C++ 的 iostream 库。(而且我也不想使用 boost 格式)。

引用上面的源码,-WFormat 基本上提供了以下能力

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

到目前为止,我能找到的最接近微软的是这个警告,它与使用%d64 位和 32 位版本有关。

4

3 回答 3

3

不幸的是,没有办法在编译时生成这样的警告,但是 VC++ 代码分析工具会为参数不匹配的类似 printf 的函数生成警告消息。

有关更多详细信息,请参阅/analyzeVC++ 和http://msdn.microsoft.com/en-us/library/vstudio/ms173498.aspx中的选项。

作为旁注,人们一直在抱怨这一点,所以微软将来可能会做点什么: https ://connect.microsoft.com/VisualStudio/feedback/details/799869/detection-of-format-string-errors-应该是常规 c 编译而不是分析的一部分

于 2013-09-27T15:20:23.123 回答
3

我相信这不是 Visual Studio 中支持的功能(我会尝试为此查找引用)。我知道的最接近的是使用_Printf_format_string_ SAL 注释

于 2012-04-23T14:31:46.463 回答
-3

具体来说,我希望编译器对参数进行某种级别的类型检查。

默认情况下,编译器喜欢在 C++ 代码中进行类型检查。不幸的是,您正在尝试使用不提供该功能的 C 工具。

只需使用 IO 流,当类型不匹配时,编译器不仅会发出警告:它会发出错误并无法完全编译您的代码!

于 2012-04-23T14:19:25.580 回答