C++如何使用Clang-Tidy进行静态代码分析?(工具教程)

夏涛吖_1608

夏涛吖_1608

2025-12-24

900人浏览

原创

clang-tidy 是 llvm 提供的可扩展 c++ 静态分析工具,依赖 compile_commands.json 获取编译信息,支持按需启用检查规则、自动修复、编辑器集成及 ci/cd 流程嵌入。

c++如何使用clang-tidy进行静态代码分析?(工具教程)

Clang-Tidy 是 LLVM 项目提供的一个可扩展的 C++ 静态分析工具,能自动检测常见编程错误、风格问题和潜在缺陷。它不依赖完整编译,但需要准确的编译命令信息(通常来自 compile_commands.json),才能正确解析模板、宏和头文件。

准备编译数据库(compile_commands.json)

Clang-Tidy 需要知道每个源文件是如何被编译的(包含哪些头路径、宏定义、语言标准等)。最可靠的方式是生成 compile_commands.json

  • 使用 CMake:在构建目录中运行 cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..,CMake 会自动生成该文件
  • 使用 Ninja 或 Make:确保构建系统支持导出(如 Ninja 默认支持),或用工具如 Bear 拦截编译过程:bear -- make
  • 文件必须位于项目根目录或 Clang-Tidy 当前工作目录下;也可用 -p 参数指定路径

运行基础检查

最简单的用法是检查单个文件:

clang-tidy -p build/ main.cpp

常用选项说明:

C++ 算法竞赛自动化测试数据生成与校验框架
C++ 算法竞赛自动化测试数据生成与校验框架

根据原题生成新题面、验证器及完整测试数据,自动套用 testlib 模板,用于用户要求生成测试数据时。

下载
  • -p build/:指定编译数据库所在目录(含 compile_commands.json
  • --checks="-*,cppcoreguidelines-*":禁用所有默认检查,只启用 C++ Core Guidelines 相关规则
  • --fix:自动修复支持就地修改的检查项(如命名、括号格式)
  • --header-filter="^include/|^src/":限制检查范围,避免误报第三方头文件

选择并组合常用检查项

Clang-Tidy 内置数百条检查规则,按类别组织。实用组合示例:

  • modernize-*:推荐现代 C++ 写法(如用 auto、范围 for、智能指针)
  • cppcoreguidelines-*:遵循 C++ Core Guidelines(如避免裸指针、强制 const 正确性)
  • bugprone-*:捕获易导致崩溃或未定义行为的模式(如空指针解引用、拷贝赋值异常安全)
  • performance-*:提示性能隐患(如传大对象用 const 引用、避免重复计算)
  • 组合写法:--checks="*-*,cppcoreguidelines-*,modernize-*,bugprone-*",再用 -* 排除个别误报项

集成到开发流程

让 Clang-Tidy 真正发挥作用,需嵌入日常环节:

  • 编辑器集成:VS Code 安装 “C/C++ Extension Pack”,配置 "clang-tidy.enabled": true;CLion 可在 Settings → Editor → Inspections 中启用
  • 预提交钩子:用 pre-commit 工具调用 clang-tidy,仅检查暂存文件,失败则阻止提交
  • CMake 自动化:在 CMakeLists.txt 中添加 set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=..."),后续构建即自动分析
  • CI 流水线:在 GitHub Actions 或 GitLab CI 中加入步骤,输出 HTML 报告或失败时中断构建

基本上就这些。Clang-Tidy 不复杂但容易忽略编译数据库质量——如果路径不对或宏缺失,误报率会很高。建议从一个小模块开始试跑,逐步调整 checks 和 filter,再推广到整个项目。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.08.07

1935

5

json是什么
json是什么

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

2023.08.23

2542

1

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

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

2023.10.13

896

3

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

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

2025.09.10

2839

7

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

1878

7

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

2026.04.23

299

31

空指针异常处理
空指针异常处理

本专题整合了空指针异常解决方法,阅读专题下面的文章了解更多详细内容。

2025.11.16

159

10

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

2026.01.21

8165

27

GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

2026.04.02

658

19

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 202人学习