cppcheck是一个C++开源的静态代码检查工具。基本上编译器不检查的问题他都检查,效果还是不错的。
工作中用到cppcheck作为代码检查,网上现在能搜到的关于cppcheck相关信息也不多,自己也在这里记录一下。其实引入cppcheck确实能为代码提供一些基本风险检测
比如
最重要的是还能自己定制项目中对应的规则,这也是我们引入cppcheck的原因。
参考了一些网上的资源cppcheck的基本使用:
https://www.cnblogs.com/freedomabcd/p/7771121.html
http://blog.csdn.net/liang19890820/article/details/52778149
https://sourceforge.net/p/cppcheck/wiki/ListOfChecks/
上面得连接都已经介绍一些cppcheck的基本使用。
在这里我就记录一下如何用cppcheck开发定制自己的规则。
原理:Cppcheck先是分析拆解代码,将每个有效字符作为一个token(token是抽象代码中所有字符的类,包含字符的字符串,类型等),提供tokenlist,规则实现者通过匹配需要的字符找到感兴趣的代码,然后通过计算查找bug注意点:
Tokenizer类: 代码token化, 计划代码
SymbolDatabase类:符号数据库,生成和存储各种符号:scope,function, variable等
Scope类: 各种代码block。最常用的有functionScopes, classAndStructScopes等
Token类: 里面有str(), next(), previous(), tokAt(), link(),Match()等常用函数
Variable类:getTypeString() --C++相关的代码经常需要
Function类:可以找到实现的scope
Value类: token可以通过getValue()得到可能的值
开发其实就是按套路走:
举个例子:除0 bug
好多规则都可以按这个套路写。只是如果判别是否是除号,以及如何判断被除的变量是否判0,这个有很多不同的形式,这得根据项目中的代码风格、规则来做对应的判断了。判断的不好会有很多误报或者遗漏。所以自定义规则可能更适合长期开发的大项目。