目录
介绍
对于一些程序bug,经常是比较难发现的,特别是新手来说,光光编译器检查,往往是不够的,那么我们可以借助一些工具帮助我们,提高我们的代码质量,或者说减少bug,这里介绍一款非常实用的C/C++代码缺陷静态检查工具:cppcheck。不同于C/C++编译器及其它分析工具,Cppcheck只检查编译器检查不出来的bug,不检查语法错误。
cppcheck 是一个静态代码检查工具,支持c, c++ 代码;作为编译器的一种补充检查,cppcheck对产品的源代码执行严格的逻辑检查。 执行的检查包括:
1. 自动变量检查
2. 数组的边界检查
3. class类检查
4. 过期的函数,废弃函数调用检查
5. 异常内存使用,释放检查
6. 内存泄漏检查,主要是通过内存引用指针
7. 操作系统资源释放检查,中断,文件描述符等
8. 异常STL 函数使用检查
9. 代码格式错误,以及性能因素检查
这里我以linux环境为例,介绍一下cppcheck的安装及使用。
安装
比较简单,直接apt-get install cppcheck就可以辣。输入cppcheck --version看到版本就OK了。
使用
输入cppcheck回车,可以看到它的一些使用介绍
最后还有例子,可以好好看看。
实操
这里我介绍一下我比较常用的操作,直接上图:
1.cppcheck --enable=all --force ./hello.c检查hello.c单个文件,“--enable=all”表示使能所有检查,“ --force”是多个宏定义时全部检查;可以看到检查结果报告了三个问题:
(1).第6行错误,变量data[101]越界了;
(2).风格问题,说data赋值但没有使用;
(3).information,提示头文件没找到,一般不用处理。
2.cppcheck --enable=all --force ./ 检查./路径下的所有文件hello.c和test.c。
3.我进行gcc编译,发现hello.c第7行变量t没有定义。
所以,我们实用cppcheck的时候,一般先编译通过后,再进行cppcheck检查。
很多时候,我们只关注错误和警告,也可以像这样子操作cppcheck --enable=warning --force ./hello.c,下面是我修改后的检查:
希望对你有帮助。。。。。。