C / C++ 静态分析
C / C++ 栈的 L1 静态分析由 两个 skill 协同,与 MISRA / AUTOSAR / CERT 等汽车和嵌入式规范紧密配合。
| Skill | 维度 | 一句话描述 |
|---|---|---|
| clang-tidy | 规则 + 现代化 | 覆盖 bugprone / performance / modernize / cert / security 检查 |
| cppcheck | Bug | 内存泄漏 / 空指针 / 数组越界 / 未定义行为(无需编译) |
clang-tidy
用途:基于 LLVM 的 C/C++ 静态分析,规则集极其丰富。
| 规则分组 | 覆盖内容 |
|---|---|
bugprone-* | 典型 Bug 模式 |
performance-* | 性能反模式(不必要拷贝、低效容器) |
modernize-* | C++11/14/17/20 现代化建议 |
cert-* | CERT C/C++ 安全编码规范 |
cppcoreguidelines-* | C++ Core Guidelines |
clang-analyzer-* | Clang 静态分析器 |
misra-*(第三方插件) | MISRA C:2012 |
依赖:需要 compile_commands.json(CMake 一键生成)。
触发:"C++ 现代化"、"clang-tidy 跑一下"、"MISRA 检查"
cppcheck
用途:无需编译的 C/C++ Bug 检测器(只需源码)。
| 检测项 | 示例 |
|---|---|
| 内存泄漏 | malloc 后未 free、异常路径泄漏 |
| 空指针解引用 | if (p == NULL) return; *p = 1;(条件后误用) |
| 数组越界 | int a[5]; a[5] = 1; |
| 未定义行为 | 整数溢出、未初始化变量使用 |
| 资源泄漏 | 文件句柄、Socket、Mutex 未释放 |
| API 误用 | memcpy 重叠、printf 格式不匹配参数 |
优势:
- 不依赖编译环境(没有
compile_commands.json也能跑) - 适合扫描第三方代码、旧项目
- 与 clang-tidy 互补(clang-tidy 规则更细但环境要求高)
触发:"C++ 内存泄漏检查"、"cppcheck 扫描"、"数组越界"
组合使用建议
两者输出有重叠也有互补,建议同时启用。
汽车行业用法
对于 MISRA C / ISO 26262 / AUTOSAR 项目:
- standards-converter 把"企业 MISRA 剪裁清单"转成 clang-tidy
.clang-tidy配置 - clang-tidy + cppcheck 做 L1 扫描
- code-review 做 L2 语义评审,对照 ISO 26262 相关需求
- 审核结果通过 gerrit-integration 回帖评分