CherieLi Student

cppcheck学习

2020-03-12
CherieLi

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

http://pfultz2.com/blog/2018/11/04/stl-alogrithms/


上一篇 开发者测试

下一篇 lua 学习

Comments

Content