0

0

Clang-Tidy如何在c++项目中进行静态代码检查 提升代码质量【工程化】

冰火之心

冰火之心

发布时间:2025-12-31 18:41:02

|

301人浏览过

|

来源于php中文网

原创

Clang-Tidy 是 LLVM 提供的 C++ 静态分析工具,需嵌入构建流程、统一规则并持续反馈;推荐通过 CMake 集成,支持配置文件、CI 门禁、本地实时检查及自动修复,核心是规则可配、执行可嵌、结果可溯、修复可自动化。

clang-tidy如何在c++项目中进行静态代码检查 提升代码质量【工程化】

Clang-Tidy 是 LLVM 项目提供的 C++ 静态分析工具,能自动检测代码中潜在的 bug、风格问题、性能隐患和不安全用法。在工程化实践中,它不是“跑一次就完事”的玩具,而是需要嵌入构建流程、统一规则、持续反馈的基础设施。

集成到 CMake 构建系统(推荐方式)

现代 C++ 项目多用 CMake,Clang-Tidy 可通过 CMAKE_CXX_CLANG_TIDY 变量直接启用:

  • CMakeLists.txt 根目录添加:
    set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=-*,cppcoreguidelines-*,modernize-*,performance-*,bugprone-*,cert-*" CACHE STRING "Clang tidy checks")
  • 确保使用 Ninja 或 Make 等支持编译数据库(compile_commands.json)的生成器:
    cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
  • 构建时,Clang-Tidy 会自动对每个编译单元执行检查,并将结果输出到终端或日志中

定制检查规则并维护配置文件

编码在 CMake 中不易维护,建议抽离为独立配置文件:

  • 创建 .clang-tidy 文件(放在项目根目录),内容示例:
    Checks: '-*,cppcoreguidelines-*,modernize-use-nodiscard,-cppcoreguidelines-owning-memory,-modernize-use-auto'
    WarningsAsErrors: true
    HeaderFilterRegex: '^(include|src)'
  • 该文件会被 Clang-Tidy 自动识别,优先级高于命令行参数
  • - 前缀禁用特定检查,用 , 分隔多个规则,支持通配符

与 CI/CD 流水线结合实现门禁控制

避免低质量代码合入主干,需在 CI 中强制执行并阻断失败构建:

稿定AI绘图
稿定AI绘图

稿定推出的AI绘画工具

下载

立即学习C++免费学习笔记(深入)”;

  • 在 GitHub Actions / GitLab CI 中调用:
    run-clang-tidy -p build/ -fix -quiet | tee clang-tidy-report.txt
  • 使用 -fix 自动修复可安全修改的问题(如添加 override[[nodiscard]]
  • 配合 clang-tidy-diff.py(LLVM 提供脚本)只检查本次 PR 修改的代码,提升效率和精准度
  • 将报告转为 SARIF 格式,接入 GitHub Code Scanning,实现问题直接标注在 PR diff 上

开发者本地高效使用习惯

静态检查的价值取决于是否被开发者真正感知和响应:

  • VS Code 安装 C/C++ Extension Pack + Clang-Tidy 插件,编辑时实时高亮问题
  • 在终端快速对单个文件检查:
    clang-tidy src/main.cpp -- -Iinclude -std=c++17
  • 定期运行全量扫描并生成 HTML 报告:
    run-clang-tidy -p build/ -export-fixes=fixes.yaml && clang-tidy -export-fixes=report.html
  • 把常用检查组合成别名,例如:
    alias ct-check='clang-tidy -p build/ -checks="cppcoreguidelines-*,modernize-*"'

Clang-Tidy 的工程化落地核心是:规则可配置、执行可嵌入、结果可追溯、修复可自动化。它不替代 Code Review,但能把重复性、机械性的质量判断交给机器,让团队聚焦更高阶的设计与逻辑问题。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

402

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

528

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

306

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

591

2023.06.14

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

638

2023.06.21

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

458

2023.07.31

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

241

2023.08.01

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.7万人学习

AngularJS教程
AngularJS教程

共24课时 | 2.2万人学习

CSS教程
CSS教程

共754课时 | 17.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号