Clang-Tidy 和 Cppcheck 需配置对齐路径、收敛范围、分离职责:Clang-Tidy 依赖 compile_commands.json,需 CMake 开启导出;Cppcheck 应限目录与检查项;二者分工明确,避免重复告警与误修复。

Clang-Tidy 和 Cppcheck 不是“装上就能用”的工具,直接启用默认配置大概率会刷屏误报、拖慢编辑器、甚至干扰构建——关键在路径对齐、检查范围收敛和职责分离。
clang-tidy 找不到编译参数,报 cannot find header 或 undefined symbol
根本原因是 clang-tidy 没拿到真实的编译命令(宏定义、-I 路径、标准版本等)。它不读 c_cpp_properties.json,只认 compile_commands.json。
- 必须在 CMake 配置中加
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,生成compile_commands.json到 build 目录 - VSCode 插件设置里
clang-tidy.executable要指向真实路径(如C:\LLVM\bin\clang-tidy.exe),不能只写clang-tidy -
clang-tidy.checks别用*,推荐显式启用:"-*,cppcoreguidelines-*,modernize-*,performance-*,bugprone-*" - 如果项目有自定义头文件路径(比如
include/),在.clang-tidy里配HeaderFilterRegex: "^src/|^include/",否则诊断不进头文件
cppcheck 扫描太慢、误报一堆 uninitvar 或 memleak
cppcheck 默认开启全部检查项,且对宏展开、模板推导支持弱,盲目全扫等于自找麻烦。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- 不要在项目根目录直接跑
cppcheck .;cd 到src/或lib/这类纯源码目录再执行 - 用
--enable=warning,style,performance代替--enable=all,禁掉unusedFunction这类项目级判断项 - 对已知安全的模式 suppress:比如
--suppress=uninitMemberVar:src/Widget.h,比全局关掉更可控 - 若项目用了
[[maybe_unused]],确认 cppcheck 版本 ≥ 2.12,否则会误报未使用变量
两个工具同时启用,Problems 面板里重复告警、定位混乱
Clang-Tidy 和 Cppcheck 的检测逻辑不同源,强行混看只会增加认知负担。它们该各干各的活。
立即学习“C++免费学习笔记(深入)”;
- 让 Cppcheck 专注资源生命周期:
memleak、uninitvar、bufferAccessOutOfBounds—— 它不依赖 AST,旧代码、宏多的模块也稳 - 让 Clang-Tidy 管语言规范:
cppcoreguidelines-*、modernize-use-auto、readability-identifier-naming—— 它能理解模板实例化 - 避免双扫同一头文件:cppcheck 加
--suppress=*:include/,Clang-Tidy 在.clang-tidy中设HeaderFilterRegex: "^src/" - VSCode 插件里别开“自动修复所有建议”,Clang-Tidy 的
modernize-use-nullptr类修复可能破坏 ABI 兼容性
最易被忽略的一点:Clang-Tidy 的 readability-identifier-naming 默认要求 PascalCase 类名,但如果你项目用 snake_case,它不会自动适配——必须在 .clang-tidy 里硬写 CheckOptions 显式覆盖,否则每次保存都在改命名,而你根本没意识到规则来源。

















