Cppcheck可以用于C/C++ 代码的静态分析,帮助开发者来检测代码中的错误。Cppcheck能检测出多种类型错误,如语法错误、未使用函数、内存泄露、未初始化的变量等。另外,Cppcheck还支持用户自定义规则,让开发者能根据自己需求定制Cppcheck的行为。
含错误、警告、样式、可移植性、性能、信息等。这些选项可通过命令参数来进行启用或者禁止,来定制Cppcheck的行为。如需要错误和警告可通过enable=warning,error参数来运行Cppcheck。
Cppcheck的检查范围如下。
未定义行为:如死指针、零除、整数溢出、无效的位移操作数、无效转换、STL无效使用、内存管理、空指针解引用、越界检查、未初始化变量、写入const数据等。
安全性:Cppcheck可以检测一些常见的安全漏洞,比如缓冲区错误、不当访问控制、信息泄露等。
编码安全性:Cppcheck支持多种编码标准,如 Misra C 2012、Misra C++ 2008、Cert C、Cert C++ 等。
其他检查:Cppcheck能有很多其他检查,还可以从命令行应用程序中检索所有已实施检查的当前列表:
# get list of checks
cppcheck --doc
# get list of error messages
cppcheck --errorlist
检查是否有64位可移植性:
- 将地址分配给/从 int/long
- 从函数返回时将地址从/转换为整数
检查断言,如果断言语句中有副作用,会发出警告。
检查自动变量:指向变量的指针仅在变量处于作用域内时才有效。检查:
- 返回指向自动或临时变量的指针
- 将变量的地址分配给函数的有效参数
- 返回对局部/临时变量的引用
- 返回函数参数的地址
- 指针参数的可疑赋值
- 函数参数的无用赋值
布尔值检查:
- 对布尔值使用增量
- 将布尔表达式与 0 或 1 以外的整数进行比较
- 使用关系运算符比较返回布尔值的函数
- 使用关系运算符比较布尔值与布尔值
- 在按位表达式中使用 bool
- 条件中的指针加法(忘记了取消引用或需要指针溢出才能使条件为假)
- 将布尔值分配给指针或浮点数
- 从具有布尔返回值的函数返回 0 或 1 以外的整数
检查 Boost 的无效使用:
- BOOST_FOREACH 期间的容器修改
Cppcheck可允许通过命令行来启用或禁用特定检查器。可用--enable=参数来启用特定的检查器,或者使用--disable=参数来禁用特定的检查器。
如,想启用内存相关的检查用以下命令:
cppcheck --enable=warning,performance,portability,information,missingInclude --suppress=missingIncludeSystem yourfile.cpp
这个命令会启用所有警告,性能,可移植性,信息和缺失包含的检查,但是会抑制系统确实包含的警告。
要根据需求选择启用或禁用哪些检查器,不是所有检查器都适合所有情况,根据代码和需要检查问题来选择欢迎继续关注华纳云。