cppcheck C/C++代码静态检查工具

cppcheck C/C++代码静态检查工具

简介

Cppcheck是C/C++代码的静态分析工具. 它通过分析源码来检测错误, 专注于检测未定义的行为和危险的编码构建.

cppcheck官网: http://cppcheck.net/
cppcheck手册: https://cppcheck.sourceforge.io/manual.pdf

使用cppcheck

编译安装

(当前所使用的cppcheck版本为2.7)
系统要求: g++ version > 4.8

从官网下载安装包,解压够进入:

cd cppcheck-2.7  
make FILESDIR=/usr/local/share/cppcheck  
make install FILESDIR=/usr/local/share/cppcheck  

使用方式

cppcheck [options] [files or path]

若指定的是目录, 则递归遍历目录下.cpp/.c等所有代码文件.

常用选项

--project=<file>
该选项指定项目文件. cppcheck可直接使用项目文件来对项目做检查(例如vs的.sln文件和.vcxproj).
--file-filter=<str>
该选项过滤文件, cppcheck仅检查匹配的文件.
--file-list=<file>
该选项指定文件, cppcheck仅检查指定的文件.
-i<file>
该选项忽略某个文件.

--enable=<id> // id: all/warning/style/performance/portability/information/unusedFunction/missingInclude
该选项指定条件检查, 输出某类信息, 可以同时指定多项, 通过逗号分隔.

--suppress=<spec> // spec: [error id]:[filename]:[line]
该选项用于忽略某类型检查. filename和line是可选的, error id可使用通配符.

--output-file=<file>
输出结果到文件, 而非标准错误.

--cppcheck-build-dir=<dir> // dir目录需要手动创建
该选项指定一个cppcheck构建目录, 它将会保存cppcheck分析过程中的数据, 若文件没有改动将不会参与下次检查. 即为增量检查, 建议使用该选项.

-x <language>, --language=<language> // language: c/c++
该选项显示指定项目的编程语言.
--std=<standard> // standard: c89/c99/c11/c++03/c++11/c++14/c++17/c++20
该选项指定std标准, 当前cppcheck版本, c标准默认为c11, c++标准默认为c++20.
--platform=<type> // type: unix32/unix64/win32A/win64/...
该选项指定代码所在环境编译平台, 用于判断类型及其长度. linux服务端开发通常情况下选择unix64.

-D<symbol>/-U<symbol>
-D添加宏定义/-U取消宏定义

-I<dir>
-I指定头文件所在目录

--template=<text> // text: gcc/vs/自定义
指定输出格式模板, 默认为gcc风格. 输出格式可自定义.
--xml
将stderr内容输出为xml格式.

--addon=<addon>
额外的检查项. 在cppcheck的安装路径addrons目录中有提供一些脚本辅助检查专项内容.

--check-library
该选项检查不完整的库. cppcheck默认配置了标准库(std.cfg)和一些常见的库(如boost.cfg), 用户所使用的库, 如果没有做相关配置, 则cppcheck无法判断使用库相关的代码是否有问题.
--library=<cfg>
指定使用配置文件. 配置文件提供了类型和函数信息, 以便cppcheck得出更准确的结果.

--inconclusive
允许非确定性的结果. cppcheck输出有错误倾向的结果, 结果需要人为判断.
--bug-hunting
检查更多的bug. 同样的, 结果可能并非真正的bug, 结果需要人为判断.

-j <jobs>
启动多个线程并行检查.

用法示例

cppcheck --cppcheck-build-dir=./cppcheck_build --enable=all -x c++ --std=c++11 --platform=unix64 --inline-suppr -isrc/test.cpp src

就不做实际的实例了, 该工具用法不复杂, 直接在工程中使用吧.

小结

cppcheck可以检查出来很多代码中明显的错误, 作为之中辅助手段, 可以很快避免很多低级错误, 这样往往也能解决很多问题了. 另外cppcheck也会分析代码风格,规范,性能等, 这有助于协助养成好的编码习惯.

发表回复

电子邮件地址不会被公开。必填项已用 * 标注