简介

cppcheck 是一个静态代码检查工具,支持c, c++ 代码;作为编译器的一种补充检查,cppcheck对产品的源代码执行严格的逻辑检查。 执行的检查包括:

  1. 自动变量检查
  2. 数组的边界检查
  3. class类检查
  4. 过期的函数,废弃函数调用检查
  5. 异常内存使用,释放检查
  6. 内存泄漏检查,主要是通过内存引用指针
  7. 操作系统资源释放检查,中断,文件描述符等
  8. 异常STL 函数使用检查
  9. 代码格式错误,以及性能因素检查

安装插件

扩展搜索安装cpp-check-lint

如何检测vs code当前python版本 vscode检查代码_Memory

检查设置

"cpp-check-lint.cpplint.--enable": false,  //google C++ 代码风格检查
    "cpp-check-lint.cppcheck.--language=": "c",  //使用c语言进行检查
    "cpp-check-lint.cppcheck.--inline-suppr": false,  //取消内联
    "cpp-check-lint.cppcheck.--onsave": true,  //在文件保存时立刻检查该文件
    "cpp-check-lint.cppcheck.--enable=": "style",  //输出信息等级,可选为all, warning, style, performance, portability, information, unusedFunction, missingInclide

cpp-check-lint.cpplint.--enable 如果需要使用cpplint选项,具体设置可以参考:代码风格审查工具Cpplintcpp-check-lint.cppcheck 输出信息等级说明:
warning:为了预防bug防御性编程建议信息
style:编码格式问题(没有使用的函数、多余的代码等)
performance:建议优化该部分代码的性能
portability:移植性警告。该部分如果移植到其他平台上,可能出现兼容性问题
information:一些有趣的信息,可以忽略不看的。
unusedFunction:未使用的函数
missingInclide:缺少头文件

常见错误

CWE-398 The scope of the variable 'xxx' can be reduced.cppcheck(style:variableScope)

变量的作用域可以缩小。报错的原因是可能有个局部变量可以进一步缩小作用域,可以放到更深的括号里

CWE-563 Unused variable: aacppcheck(style:unusedVariable)

变量被声明了但是从未被使用。报错的原因是可能有定义过但后来又删掉了的变量,属于多余的变量,可以删掉

CWE-401 Memory leak: xxx cppcheck(error:memleak)

变量内存泄漏

CWE-457 Memory is allocated but not initialized: xxx cppcheck(error:uninitdata)

成员变量没有被初始化

CWE-686 %d in format string (no. 1) requires 'int' but the argument type is 'signed int *'.cppcheck(warning:invalidPrintfArgType_sint)

打印类型不匹配

using C-style cast. Use reinterpret_cast<SHCP_PACKET *>(...) instead cpplint(warning:readability/casting)

原因校验使用了C++的检查方式,C++应该使用的其独有的四种强制类型转化方式更为安全,如果是C代码可以忽略

CWE-398 Local variable 'xxx' shadows outer argument cppcheck(style:shadowArgument)

局部变量与外部参数冲突,名字重了

扩展阅读

google c++风格规范:
Google C++ Style GuideC++ 风格指南 其他静态检查工具:
静态代码检测pc-lint, visual lint, cpp-check(pclint、cppcheck、TscanCode)