1. 简介
- 一款开源的C/C++代码分析工具
- 不检测语法错误,只检测编译器不能检测的bugs
- 不需要编译通过的源码
- 支持非标准语言包括不同的编译器扩展,内联的汇编语言
- 基本上不会误报,但也有一些错误检测不到
- 轻量级软件,几乎不需要配置
- 支持命令行和GUI两种方式
2. 简单使用
int main() { char a[10]; a[10] = 0; return 0; }
文件名保存为file1.c
执行cppcheck file1.c
输出Checking file1.c…
[file1.c:4]: (error) Array ’a[10]’ index 10 out of bounds
命令行方式:
cppcheck --force --enable=all --template vs -I ../../../inc -I ../../../inc/tinyxml . 2>err.txt
参数说明:
- a) –force 告诉cppcheck后面所有参数都是有效的(cppcheck默认不支持太多参数)
- b)–enable=all 检查所有项
- c)–template vs 输出结果使用visual studio的输出格式
- d)-I ../../../inc 增加路径../../../inc作为include目录,以便cppcheck查找头文件。可以使用多个-I参数
- e) . 让cppcheck检查当前目录。
- f)2>err.txt 将结果输出到文件err.txt中
3. 告警级别及配置
error
严重问题
warning
预防bug的一些建议
style
编码格式问题(未使用的函数, 冗余代码等)
performance
使代码更快的建议
- 默认error级别的告警能够显示,其它级别的告警显示需要设置
- cppcheck –enable=style:可以显示大多数warning、style、performance告警
- cppcheck –enable=unusedFunction path:能够检查整个工程中未使用的函数,容易地消除废弃代码
- cppcheck –enable=all:能够打开所有开关
- cppcheck –enable= missingInclude
参考资料
github
https://github.com/danmar/cppcheck/releases
man手册
https://linux.die.net/man/1/cppcheck
Using STL algorithms with cppcheck