随笔 - 119  文章 - 290  trackbacks - 0

博客搬家了哦,请移步
叫我abc

常用链接

留言簿(12)

随笔分类

我的博客

搜索

  •  

积分与排名

  • 积分 - 299137
  • 排名 - 84

最新评论

阅读排行榜

*cppcheck
cppcheck是一个静态代码检查工具。基本上编译器不检查的问题他都检查,效果还是不错的。
cppcheck的最终目标是没有误报,任重道远啊。

先贴上我使用的命令
cppcheck.exe -v -s -f -a -I bo2 -I pg ^
 项目若干... ^
 2>check.log

 经过若干小时后,生成了26.8k的check.log。
属于计算密集型任务,耗时漫长,下次再检查的时候,采用多进程的方式。

1.过滤C-style pointer casting,得到nocasting.log-13k。
cppcheck不建议使用c类型的指针转换,而是用static_cast之流。不过要打字太多,基本上没人使用。

2.过滤The class 'xxxx' has no constructor,得到noconstructor.log-12.7k。
有些类是不必写构造函数的啦。默认的就可以了。

3.提取Member variable not initialized in the constructor,得到init.log-8k;不属于该条目的其他内容保存到noinit.log-4.6k。
成员变量未初始化偶尔是一个debug/release不一致的祸根,老大建议以后再改,不过这个量有点大啊。大家太疏忽了。

4.过滤The scope of the variable de can be limited和Redundant condition. It is safe to deallocate a NULL pointer,最后得到final.log-2k。
The scope of the variable de can be limited,cppcheck建议某个临时变量的作用域可以进一步缩小。
Redundant condition. It is safe to deallocate a NULL pointer,cppcheck认为空指针可以直接delete。也不知哪里遗传的坏毛病,非要if一下。不过我不是这样的。

5.剩下的2k里面包含了19个错误条目。
有5条指出某些父类没有虚析构函数,不过那些父类没有析构函数也无关紧要。
内存泄露有几条,不过只有1条正确,其余的属于误报。
崩溃错误一条,在循环内erase(iterator)而没有break。
其他违反最佳实践的有几条,可改可不改。

总的来说,cppcheck还是不错的,是一个不花什么力气进行简单代码审核的工具。
posted on 2009-08-24 13:35 LOGOS 阅读(16757) 评论(4)  编辑 收藏 引用

FeedBack:
# re: cppcheck的使用 2009-08-24 16:45 Pear
真有这么威?玩一下先  回复  更多评论
  
# re: cppcheck的使用 2009-08-24 20:35 littlewater
原来还有这种东东啊!!  回复  更多评论
  
# re: cppcheck的使用[未登录] 2009-11-20 15:21 robert
能分享下怎么使用cppcheck吗?我的QQ是65114698.。。  回复  更多评论
  
# re: cppcheck的使用 2014-07-13 20:10 wqq
你好,你会使用cppcheck吗?@robert
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理