建议使用任何流行的c ++代码静态检查工具?

时间:2012-08-18 08:51:54

标签: c++ static-analysis static-code-analysis

在我们的团队中有几个新的c ++人员,所以每天都有太多丑陋的代码! 我讨厌那些使用readonly字符串,STL容器作为参数的函数,但是没有const引用!我疯了!!!

是否有任何静态代码检查器可以找到这些丑陋的代码?我需要在makefile中使用这样的工具。

2 个答案:

答案 0 :(得分:3)

是的,用自动化工具防止“坏代码”的可能性不大。

对于我自己,而且我也在我的工作场所这样做,我总是尽可能多地发出警告(通常是通过启用高水平的警告并且只关闭'明显愚蠢'的警告; g ++正在唯一的例外,因为它没有打开所有东西的选项,所以我做了-Wall,-Wextra和一大堆其他-W,偶尔会通过手册查看是否添加了新的警告。 / p>

我也用-Werror或/ WX编译。不幸的是,虽然Linux和Windows标题现在看起来相当干净,但我会对诸如糟糕的强制转换或来自boost标头的使用不当的宏之类的东西发出愚蠢的警告。第三方图书馆经常写得不好警告。

对于静态分析工具,我确实尝试过cppcheck和clang(两者都是免费的,这就是我尝试它们的原因)。对他们中的任何一个都不感兴趣;我仍然计划在我的构建软件中添加一些或两者的支持,但它的优先级相当低。其中一个(不记得是哪一个)实际上找到了SOMETHING:一个不必要的赋值,任何体面的优化器都会删除它。我不认为我是一个完美的0-bugs开发人员,所以我责备工具。不过,我确实删除了这项任务: - )

如果我没弄错的话,商业VisualStudio版本也会进行代码分析(在家里,我更像是一个Express人,而且我在工作中遇到了MacOS开发);也许那个更好。或者其他商业工具之一;毕竟,他们必须为他们的钱提供一些东西。

还有一些额外的免费工具我尚未尝试过;我不知道http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#C.2FC.2B.2B列表有多完整,但我希望最终能够尝试所有可以处理C ++的免费工具。

特别针对您的问题,Wi8kipedia将“cpplint”描述为“cpplint实现了Google认为是C ++编码中的最佳实践”。我不知道这意味着什么,但维基百科页面有一个链接到“谷歌C ++风格指南”pdf。或者你可以尝试一下,看看它抱怨什么: - )

另外,我可能不希望将这些工具添加到Makefile中(除非你意味着人们仍然必须调用“make check”来实际运行它)。将它添加到源代码存储库以在允许它们之前检查新提交可能太耗费时间(代码分析几乎“正在编译许多额外内容”,因此需要花费大量时间),但是你现在可以自动运行它然后。

答案 1 :(得分:0)

parfait或lint,谷歌“静态分析工具”

如果你使用GCC将这些作为警告,你可以使用-Wall标志来获取其中一些。