Cppcheck是一款专业的C/C++静态代码检测工具,一般程序员在开发程序的时候经常会遇到编译器编译不出来的问题,通过这款软件可以检测出一般的编译器查不出来的BUG,不过与其它工具不同的是这款工具并不检测语法错误,拥有自动变量检测、clss类检测等功能。

主要功能:
1. 自动变量检查
2. 数组的边界检查
3. class类检查
4. 过期的函数,废弃函数调用检查
5. 异常内存使用,释放检查
6. 内存泄漏检查,主要是通过内存引用指针
7. 操作系统资源释放检查,中断,文件描述符等
8. 异常STL 函数使用检查
9. 代码格式错误,以及性能因素检查
Cppcheck使用教程
1、将Cppcheck绿色版cppcheck.rar解压;
2、打开cppcheckgui.exe;
3、菜单 check->directory;
4、选择源代码目录,确认;
5、Cppcheck自动开始走查;
Cppcheck使用说明
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工具介绍
客户端和插件
Cppcheck与许多流行的开发工具集成在一起。 例如:
CLion - Cppcheck插件
代码::块 - 集成
CodeDX(软件保证工具) - 集成
CodeLite - 集成
CppDepend 5 - 集成
Eclipse - Cppcheclipse
gedit - gedit插件
哈德森 - Cppcheck插件
Jenkins - Cppcheck插件
Mercurial(Linux) - 预提交钩子 - 检查提交时的新错误(需要交互式终端)
Tortoise SVN - 添加预提交钩子脚本
Git(Linux) - 预提交钩子 - 检查进入提交的文件中的错误(需要交互式终端)
Visual Studio - Visual Studio插件
QtCreator - Qt项目工具(qpt)