首页/开发/代码质量与评审速查/clang-tidy:C++ 检查与现代化
规范与静态检查65 条

clang-tidy:C++ 检查与现代化

clang-tidy 提供多族检查:bugprone(易错模式)、modernize(现代化改写)、performance、readability、clang-analyzer(静态分析),支持 --fix 自动修复部分问题。

clang-tidy 是什么

clang-tidy 是 C++ 的检查与现代化工具:按检查族组织规则,bugprone 找易错模式,modernize 提示改用新标准写法,performance 关注多余拷贝与临时对象,readability 管可读性,clang-analyzer 提供路径敏感的缺陷分析。其中一部分检查支持自动修复。

基本信息

检查族bugprone / modernize / performance / readability / clang-analyzer
配置.clang-tidy 文件里的 Checks 与 CheckOptions
前置条件需要编译数据库 compile_commands.json
自动修复--fix 能修掉一部分检查

典型使用场景

  • 引入现代写法:modernize 系列提示 nullptr、override 等改法
  • 排查易错模式:bugprone 系列覆盖常见陷阱
  • 性能敏感模块:performance 系列关注多余拷贝与临时对象
  • 统一命名:readability-identifier-naming 统一命名风格
  • 深度分析:clang-analyzer 做路径敏感的缺陷检查

落地顺序

  • 先搭好编译数据库,保证解析正确
  • 从单个检查族开始,控制误报数量
  • 把确认有价值的检查写进配置文件
  • 自动修复单独提交,便于回滚

用法

用法
clang-tidy -p build/ src/*.cpp        # 用编译数据库运行
clang-tidy src/*.cpp --fix            # 自动修复部分检查
clang-tidy -p build/ --checks='-*,readability-identifier-naming' src/*.cpp   # 只跑一族

检查族与关注点

检查族关注点
bugprone易错模式,如隐式收窄转换、悬垂引用
modernize改用新标准写法,如 nullptr、override
performance多余拷贝、临时对象、低效循环
readability命名、括号、函数长度等
clang-analyzer路径敏感缺陷,如空指针与资源泄漏
自动修复只覆盖一部分检查,跑完仍然要人工复核:工具会改结构,但不保证语义没有问题。

在评审中怎么用

  • 新增告警作为关注点,存量告警按模块分批处理
  • 自动修复的提交单独评审,确认语义没有变化
  • 检查配置的改动要说明理由与影响范围
  • 编译数据库的生成方式写进项目文档
在评审中的用法:把检查结果贴进改动里作为参考,重点看新增的告警,存量告警按模块分批处理。
把检查配置与工具版本一起入库:换了环境也能得到同样的结论,评审时不必再讨论结果是否可信。
编译数据库要随构建配置一起生成:包含路径或宏定义不一致时,检查结果会与真实编译情况脱节。
一次性打开全部检查:误报过多,团队很快整体关闭,真正的缺陷提示也被一起忽略。

易错点

  • 没有编译数据库:解析失败或结果不完整,检查形同虚设
  • 全量打开检查:误报过多,先选检查族再逐步收紧
  • 直接提交自动修复结果:改动范围大又没确认,容易混进问题
  • 检查通过就以为万事大吉:静态分析覆盖不了并发与时序问题
  • 把编译器告警与检查告警一起升为错误:两类信息混在一起,定位成本陡增

数据来源与参考

  • clang-tidy 官方文档(clang.llvm.org)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌