官方主页
http://sourceforge.net/apps/mediawiki/cppcheck/index.php?title=Main_Page
其他人的文档:
http://www.dotblogs.com.tw/larrynung/archive/2011/10/29/47866.aspx
[C++]使用Cppcheck靜態分析工具輔助檢查C++程式潛在問題
百度上的架构说明:
c p p c h e c k 的 整 体 架 构
cppcheck是我们最常用的针对C/C++代码的静态检查工具,我们也对其进行过二次开发,这是之前路军给我们分享过cppcheck的源码架构,大家可以学习一下。这是整体架构
http://wenku.baidu.com/view/7d9804c7bb4cf7ec4afed0aa.html
c p p c h e c k 的 检 查 项 的 实 现
cppcheck是我们最常用的针对C/C++代码的静态检查工具,我们也对其进行过二次开发,这是之前路军给我们分享过cppcheck的源码架构,大家可以学习一下。这是cppcheck的检查项的实现
http://wenku.baidu.com/view/018b5a35a32d7375a41780ab.html?from=rec&pos=0&weight=19&lastweight=3&count=5
A free tool to check C/C++ source code against a set of coding standards?
http://stackoverflow.com/questions/93260/a-free-tool-to-check-c-c-source-code-against-a-set-of-coding-standards
http://www.cppblog.com/darkdestiny/archive/2009/08/24/94249.html
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还是不错的,是一个不花什么力气进行简单代码审核的工具。