0

0

c++ 静态代码分析工具 c++如何使用cppcheck或clang-tidy

月夜之吻

月夜之吻

发布时间:2026-03-17 16:27:56

|

746人浏览过

|

来源于php中文网

原创

cppcheck和clang-tidy应分工协作:cppcheck专注资源生命周期检查(如memleak、uninitvar),clang-tidy聚焦语言规范与现代用法(如cppcoreguidelines-、modernize-),并通过suppress和配置抑制误报,避免重复告警。

c++ 静态代码分析工具 c++如何使用cppcheck或clang-tidy

cppcheck 怎么跑起来不报一堆误报

cppcheck 默认开启大量检查项,尤其对未初始化变量、内存泄漏这类问题特别敏感,但很多是假阳性。关键不是关掉检查,而是用配置压住噪音。

  • --enable=warning,style,performance 明确启用几类常用检查,别用 --enable=all —— 那会把 unusedFunction 这种项目级判断也塞进来,干扰大
  • --suppress=uninitMemberVar:src/Widget.h 抑制特定文件里的特定警告,比全局关掉更安全
  • 如果项目用了 C++17 的 [[maybe_unused]],cppcheck 2.12+ 才识别,旧版本会误报未使用变量,得升级或手动 suppress
  • 别直接在源码根目录跑 cppcheck .,先 cd 到 build/ 外的源码目录,避免扫描生成物和第三方头文件

clang-tidy 怎么绑定到 cmake 构建流程里

单独调 clang-tidy 容易漏掉宏定义和 include 路径,导致“找不到头文件”或“宏没展开”,必须让它复用编译命令。

  • cmake 配置时加 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON,生成 compile_commands.json
  • 运行 clang-tidy -p build/ --checks="-*,bugprone-*,readability-identifier-naming" src/main.cpp-p build/ 指向含 compile_commands.json 的目录
  • readability-identifier-naming 默认要求类名 PascalCase,但如果你项目用 snake_case,得配 .clang-tidy 文件写 CheckOptions: [{key: readability-identifier-naming.ClassCase, value: lower_case}]
  • 注意 clang-tidy 15+ 默认不开 modernize-use-auto,要加进 --checks 才生效,老版本则默认开但行为不一致

cppcheck 和 clang-tidy 同时用,怎么避免重复告警

两者重叠检查(比如空指针解引用、数组越界)但报错格式、粒度不同,混着看反而降低效率。不如按能力分工。

讯飞绘文
讯飞绘文

讯飞绘文:免费AI写作/AI生成文章

下载
  • cppcheck 主盯资源生命周期:memleakuninitvarbufferAccessOutOfBounds —— 它不依赖 AST,对宏多的旧代码更稳
  • clang-tidy 主盯语言规范和现代用法:cppcoreguidelines-*modernize-*performance-* —— 它能理解模板实例化和 SFINAE
  • 别让两个工具扫同一份 .h 文件两次:cppcheck 加 --suppress=*:include/,clang-tidy 在 .clang-tidy 里设 HeaderFilterRegex: "^src/"
  • CI 里并行跑没问题,但报告聚合时,优先采信 clang-tidy 对 std::vector::at() 越界这种带运行时语义的判断,cppcheck 更容易漏掉

为什么 clang-tidy 在 Windows 上总卡在 “No compilation database found”

不是路径写错,是 cmake 生成的 compile_commands.json 默认只在 Ninja/Unix Makefile 生成器下输出,Visual Studio 生成器默认不生成。

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

  • Windows 下别用 Visual Studio 17 2022 生成器,改用 Ninjacmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
  • 如果非要用 MSVC,装 Compile DB 插件或改用 vscode-cpptools 自动导出,但稳定性不如 Ninja
  • 检查 compile_commands.jsoncommand 字段是否含 cl.exe 路径 —— 如果是绝对路径且带空格(如 C:\Program Files\...),clang-tidy 会解析失败,需用 cmake -T host=x64 统一工具链
  • WSL 下跑 clang-tidy 却指向 Windows 路径?加 --query-driver="/mnt/c/Program Files/Microsoft Visual Studio/*/VC/Tools/MSVC/*/bin/Hostx64/x64/cl.exe" 帮它找编译器
实际用起来,最麻烦的从来不是工具装不上,而是 cppcheck 把你写的 static_assert 当死代码删掉、clang-tidy 在模板特化里错判 const 修饰——这些边界 case 得靠 suppress 和局部禁用扛过去。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

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

下载

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

458

2023.08.07

json是什么
json是什么

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

549

2023.08.23

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

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

337

2023.10.13

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

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

84

2025.09.10

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

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

565

2023.09.20

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

448

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

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

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

23

2025.11.16

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

3

2026.03.17

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.5万人学习

C 教程
C 教程

共75课时 | 5.6万人学习

C++教程
C++教程

共115课时 | 22.3万人学习

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

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