*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 阅读(16930)
评论(4) 编辑 收藏 引用