CppCheck代码静态检测工具

一、简述

Cppcheck是一种C/C++代码缺陷静态检查工具。不同于 C/C++ 编译器及很多其它分析工具,它不检查代码中的语法错误。Cppcheck只检查编译器检查不出来的bug类型,其目的是检查代码中真正的错误。

支持的代码和平台:

  • 可以检查非标准代码,包括不同的编译器扩展、内联汇编代码等。
  • Cppcheck应该被处理最新C++标准的任何C++编译器所编译。
  • Cppcheck应该在任何有足够CPU和内存的平台上工作。

要知道Cppcheck有限制,Cppcheck很少在报告错误方面出错,但有很多bug,它不能检测。

通过仔细测试软件,你会发现软件中有更多的bug,而不是使用Cppcheck。但Cppcheck仍可以检测到在测试和评估软件时错过的一些bug。

二、安装

可以直接在GitHub上克隆代码,然后切换到对应版本后进行编译安装:

$ git clone git@github.com:danmar/cppcheck.git
$ cd cppcheck
$ git checkout 1.87
$ cd ..
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/opt/cppcheck-1.87 ../cppcheck/
$ make SRCDIR=build CFGDIR=cfg HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function"
$ make install

然后修改PATH环境变量,添加/opt/cppcheck-1.87/bin到PATH中。

二、使用

2.1 第一个测试程序

下面是一个简单的代码:

int main()
{
	char a[0];
	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

2.2 检查文件夹中所有文件

通常一个项目会有许多源文件,如果需要同时检查,Cppcheck可以检查文件夹中的所有文件:

cppcheck path

如果path是一个文件夹,cppcheck将递归检查这个文件夹中的所有源文件。
···
Checking path/file1.cpp…
1/2 files checked 50% done
Checking path/file2.cpp…
2/2 files checked 100% done
···

2.3 检查部分或过滤部分文件

排除一个文件或文件夹有两个选项,第一个选项是只提供你想检查的路径和文件:

cppcheck src/a src/b

所有位于 src/a 和 src/b 下的文件都会被检查。

如果使用-i选项,将会忽略指定的文件/文件夹,使用下面命令src/c将不会被检查:

cppcheck -isrc/c src

三、严重性

cppcheck的严重性等级可能为:

  • 错误(error): 当发现bug时使用
  • 警告(warning): 关于防御性编
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值