C++代码自动检测工具clang-format和clang-tidy

2023-05-16

文章目录

      • `clang-format`
        • 安装方法
        • 命令格式
        • 使用案例
        • 更多关于`clang-format`
      • `clang-tidy`
        • 简单介绍
        • 检测原理
        • 安装方法
        • 使用方法
        • 更多关于`clang-tidy`

clang-format

这里的clang-format是一种可以格式化排版多种不同语言的代码,包括LLVM和Google等不同风格,-style=google,表示应用Google的格式化风格。

安装方法

sudo apt-get install clang-format

命令格式

clang-format [options] [<file1> <file2> ...]

使用案例

// 以LLVM代码风格格式化main.cpp, 结果输出到stdout
clang-format -style=LLVM main.cpp
// 以LLVM代码风格格式化main.cpp, 结果直接写到main.cpp
clang-format -style=LLVM -i main.cpp
// 当然也支持对指定行格式化,格式化main.cpp的第1,2行
clang-format -lines=1:2 main.cpp

更多关于clang-format

clang-format的介绍和使用 - Tudou_Blog - 博客园 (cnblogs.com)

官方参考

入门参考

clang-tidy

简单介绍

clang-tidy是一个基于clang的静态代码分析框架,支持C++,并且具有自动修复功能,而且可以通过编写clang-tidy check添加新的检测功能,目前可以检测:

  1. 检测违反代码规范的代码模式(header guard不满足,include头文件顺序错误);
  2. 找出不容易在编译时发现的代码错误(把int赋值给std::string, 变量定义在头文件);
  3. 把deprecated的API替换成新的API,modernize模块典型例子,把C++03的代码自动转换成C++11的代码(for-range-loop, auto, nullptr, overriede, default);

检测原理

clang-tidy也支持检测代码中违反Google-style的地方,因为clang-tidy是基于抽象语法树(AST)进行检测的,所以要比单纯基于正则表达式的cpplint更加强大,但是检测时间也更长。

安装方法

apt-get install clang-tidy

使用方法

# 列出所有的check
$ clang-tidy -list-checks
# 找出simple.cc中所有没有用到的using declarations. 后面的`--`表示这个文件不在compilation database里面,可以直接单独编译;
$ clang-tidy -checks="-*,misc-unused-using-decls" path/to/simple.cc --

# 找出simple.cc中所有没有用到的using declarations并自动fix(删除掉)
$ clang-tidy -checks="-*,misc-unused-using-decls" -fix path/to/simple.cc --

# 找出a.c中没有用到的using declarations. 这里需要path/to/project/compile_commands.json存在
$ clang-tidy -checks="-*,misc-unused-using-decls" path/to/project/a.cc

分析项目中的y编译单元,clang-tidy首先要知道如何编译单元(该编译单元的编译命令),它从目录下查找compliation database,这个database就是compile_commands.json文件,里面包含该项目中所有的编译单元的编译命令。在使用之前要导出这个文件。目前已经有工具帮我们做了这项工作。

  • 如果是cmake的项目,通过cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON path/to/llvm/sources命令导出;
  • 如果是GYP项目,通过ninja -C out/D -t compdb cc cxx objc objcxx > compile_commands.json
  • 如果是make项目,使用Bear工具;

更多关于clang-tidy

clang-tidy——静态代码分析框架 - 简书 (jianshu.com)

深入研究Clang(十三) clang-tidy简介 - 知乎 (zhihu.com)

clang-tidy静态语义检查,安装、使用、检查项注解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++代码自动检测工具clang-format和clang-tidy 的相关文章

  • 将 pandas 中的数字格式化为以千或百万为单位的货币

    我有一个数据框 pd DataFrame Amount 19000000 9873200 823449242 我需要将数字转换为以百万计的货币 即 19 00MM 9 88MM 和 823 45MM 有谁知道一个快速的方法来做到这一点 Th
  • 构建 LLVM 失败并显示空错误消息

    我正在尝试构建 LLVM 3 1 和 Clang 3 1 我遵循了入门指南铿锵的网站 http clang llvm org get started html 检查必要位置的存储库 获取 Python 等 如果我安装了 Python 3 3
  • Android 货币输入固定小数

    如何创建仅以货币格式格式化输入的编辑文本条目 当用户输入 5 时 我希望输入看起来像 0 05 然后当他们输入 3 时 输入现在应该看起来像 0 53 最后输入 6 并且输入应该看起来像 5 36 ninjasense 的完整解决方案基本上
  • 使用 Powershell 在单独的单独行上列出完全路径文件名?

    如果我执行 Get ChildItem ext recurse 输出由一系列目录部分组成 后跟由所述目录部分分隔的每个匹配文件的一列或多列信息 有类似 Unix find 命令的东西吗 其中每个匹配的文件名及其完整的相对路径都出现在一行中
  • 时间:2019-03-17 标签:c#datetimeformat

    我希望根据当前的文化为我的日期时间设置特定的格式 所以我尝试这个 dateTime ToString dd MM yyyy hh mm 这部分是可以的 被特定于区域性的分隔符替换 但日和月的顺序不会根据文化而改变 如 MM dd Using
  • 为 std::string 实现派生复制和移动构造函数?

    我正在尝试使用 Embarcaderos clang 32 位编译器编译 VTK 7 0 库 但是 我最后收到一个链接错误 如下所示 56 Linking CXX shared library bin vtkCommonDataModel
  • 清理 PHP/HTML 页面

    有人知道有什么好用的工具可以清理php和html文件吗 我以前使用过 Tidy 但它在单独处理 php 代码方面效果不佳 我知道 tidy 有多种实现 但是有没有专门针对 html 和 php 页面的工具统治冠军 清理代码从将 PHP 与
  • C++2a 合约编程和编译器

    我有兴趣研究最近接受的C 20 的合约编程 https en cppreference com w cpp language attributes contract用于学习和调查目的 当我四处寻找编译器支持时 我很失望没有找到任何支持 两个
  • 使用 clang 的 ThreadSanitizer 和 TBB 避免误报

    有没有人尝试过clang 的 ThreadSanitizer http clang llvm org docs ThreadSanitizer html with 英特尔线程构建模块 TBB http en wikipedia org wi
  • Python 格式化小数,具有最少小数位数

    我有一些DecimalPython 中的实例 我希望将它们格式化为 Decimal 1 gt 1 00 Decimal 12 0 gt 12 00 Decimal 314 1 gt 314 10 Decimal 314 151 gt 314
  • clang 上的尾随参数包缺少默认参数

    Clang 抱怨尾随参数包不是默认的 但据我所知它是标准的并且是可能的 我做错了吗还是clang的错误 这是我的仓库 如果你想查看完整的源代码 是这里 https github com OzanCansel speech blob mast
  • 在 Clang AST 中查找声明的父级

    我正在使用 clang 进行一些分析 我需要在 AST 中找到声明的父级 例如 在下面的代码中我有int x我想获取它的父级 它应该是函数声明 int main int x return 0 我知道正如这个链接中提到的http commen
  • 如何编译LLVM Kaleidscope教程?

    我之前一直在 C 中使用 LLVM 其中包含一个 Nuget LLVM 库 我转向 C 并尝试遵循万花筒教程 https llvm org docs tutorial LangImpl03 html 不幸的是我不知道如何编译它 我保存了第三
  • printf 字符串,可变长度项

    define SIZE 9 int number 5 char letters SIZE this wont be null terminated char fmt string 20 sprintf fmt string d ds SIZ
  • clang-tidy - 忽略第三方标头代码

    我正在为我的项目使用 CMake 并且我想向项目引入 clang tidy 检查 我用于此目的CMAKE CXX CLANG TIDY and clang tidy用于检查设置的文件 我想在 CI 中使用警告作为错误来可靠地检查提交是否引入
  • 使用 libclang 从内存中的 C 代码生成程序集

    我需要实现一个使用 LLVM Clang 作为后端将 C 代码编译为 eBPF 字节码的库 代码将从内存中读取 我也需要在内存中获取生成的汇编代码 到目前为止 我已经能够使用以下代码编译为 LLVM IR include
  • java格式化表格输出

    所以我正在尝试格式化我的输出 System out println Menu nItem tItem t tPrice tQuantity for int i 0 i
  • 为什么使用初始化语法时不调用转换运算符,以及为什么 clang 错误消息看起来是错误的?

    我有以下代码 它使用显式转换构造函数构造一个对象 t2 该构造函数执行 t1 的隐式转换 这是预期的 并在 C 编程语言 第三版的 11 4 1 节中进行了描述 include
  • c++1y 模式下的 Clang >= 3.3 无法解析 标头

    我有一个项目可以在 g 4 8 1 和 c 11 模式下 clang gt 3 3 下正确编译和运行 然而 当我切换到实验时 std c 1y模式下 clang 3 3 但不是 g 在
  • 为什么这个未使用的变量没有被优化掉?

    我使用了 Godbolt 的 CompilerExplorer 我想看看某些优化有多好 我的最小工作示例是 include

随机推荐

  • atbf中imu数据读取逻辑分析仪抓取

    一 说明 使用逻辑分析仪抓区imu的spi和中断io的信号 xff0c 从而侧面描述atbf在imu上的数据读取方式 xff1b 二 硬件说明 1 硬件材料 1 mcu at32F437开发板 2 imu icm42688p 3 逻辑分析仪
  • cmake-自动识别新增子模块

    实际的项目中可能会有这种需求 xff0c 随着项目的进行 xff0c 会有新增的子模块 xff0c 如果每新增一个子模块 xff0c 顶层CMakeLists txt都要同步修改一次 xff0c 一般工程代码加入了版本控制 xff0c 那么
  • CSDN每日一练c++难题-大数加法 C语言

    题目名称 xff1a c 43 43 难题 大数加法 时间限制 xff1a 1000ms内存限制 xff1a 256M 题目描述 大数一直是一个c语言的一个难题 现在我们需要你手动模拟出大数加法过程 请你给出两个大整数加法结果 输入描述 x
  • Ubuntu软件包资源官网下载教程(包含所有下载源)

    官网地址 国外 xff1a Ubuntu Ubuntu Packages Search https packages ubuntu com 国内 xff1a Ubuntu Ubuntu Packages Search https packa
  • 基于ROS的YOLOV3实现目标检测项目过程记录

    lt link rel 61 34 stylesheet 34 href 61 34 https csdnimg cn release blogv2 dist mdeditor css editerView ck htmledit view
  • darknet_ros(yolo移植到ros系统)代码分析

    lt link rel 61 34 stylesheet 34 href 61 34 https csdnimg cn release blogv2 dist mdeditor css editerView ck htmledit view
  • DSP28335的PWM信号

    DSP的PWM信号 简介 DSP28335共12路16位的ePWM xff0c 能进行频率和占空比控制 ePWM的时钟TBCLK 61 SYSCLKOUT HSPCLKDIV CLKDIV PWM信号频率由时基周期寄存器TBPDR和时基计数
  • Kubernetes (k8s)最佳安全实践指南

    对于大部分 Kubernetes 用户来说 xff0c 安全是无关紧要的 xff0c 或者说没那么紧要 xff0c 就算考虑到了 xff0c 也只是敷衍一下 xff0c 草草了事 实际上 Kubernetes 提供了非常多的选项可以大大提高
  • DSP28335 CAN模块详解

    1 CAN2 0B协议简述 TMS320F28335上有2个增强型CAN总线控制器 xff0c 符合CAN2 0B协议 xff0c 其总线波特率可达到1Mbps 符合CAN2 0B协议的数据帧为扩展数据帧 xff0c 即采用29位标识符 数
  • DSP28335看门狗复位

    1 看门狗时钟 看门狗时钟发生器 WDCLK 61 CLKOUT 512 xff0c 当HALT时停止 6 bits预定标WDPS选择 xff1a 将WDCLK再分频后送给看门狗定时器 WDPS为WDCR的2 0 位 其6 bits配置作用
  • DSP28335 看门狗初始化函数

    DSP28335 看门狗初始化函数 看门狗初始化程序 入口参数为系统定时复位时间 在需要复位看门狗计数器的地方调用程序ServiceDog 此程序在文件DSP2833x SysCtrl c中 详细说明在 TMS320x
  • Keil5编译error:core_cm3.h

    当打开现成的工程项目时 xff0c 编译出现一堆错误 xff0c 大部分错误出现关于 core cm3 h 这个文件 xff0c 那么大概率可能跟Keil5的版本有关 xff0c 如下 xff1a 可能原因 xff1a 打开魔术棒 gt T
  • Simulink创建子系统,创建引用模型,调用模型,加密模型

    Simulink创建子系统 创建引用模型 调用模型 加密模型 一 创建子系统 1 创建新工程 并添加Logical Operator Unit Delay连线 完成如下图 全选所有模块 右键选择 基于所选内容创建子系统 ctrl G 完成如
  • 自动驾驶 2D 单目\双目\多目视觉方法 一(Pseudo-LiDAR,Mono3D,FCOS3D,PSMNet)

    文章目录 概述单目3D感知3D目标检测单目深度估计 双目3D感知双目3D目标检测双目深度估计 Pseudo LiDAR1 核心思路总结2 要点分析 Mono3DFCOS3DPSMNet 概述 自动驾驶中必不可少的3D场景感知 因为深度信息
  • [C语言] 利用库函数实现查找指定键值对功能

    1 功能描述 键值对 xff08 key 61 value xff09 字符串 xff0c 在开发中经常使用 要求1 xff1a 请自己定义一个接口 xff0c 实现根据key获取 要求2 xff1a 编写测试用例 要求3 xff1a 键值
  • 【C++】Clang-Format:代码自动格式化(看这一篇就够了)

    文章目录 Clang format格式化C代码1 引言 amp 安装1 1引言1 2 安装 2 配置字解释2 1 language 编程语言2 2 BaseOnStyle 基础风格2 3 AccessModifierOffset 访问性修饰
  • 生产者消费者问题(Producer-consumer problem)

    概述 生产者消费者问题 xff0c 也称有限缓冲问题 xff08 英语 xff1a Bounded buffer problem xff09 xff0c 是一个多线程同步问题的经典案例 该问题描述了两个共享固定大小缓冲区的线程 即所谓的 生
  • Yolov3+C+++opencv+VS2015训练过程及检测(很详细)

    运行环境 我的运行环境是C 43 43 43 opencv 43 VS2015 43 yolov3 xff0c 切记opencv的版本最好是opencv 3 4 2版以上的 xff0c 这个版本以后才有了DNN函数库来实现机器学习的相关内容
  • RAID容量在线计算器

    RAID容量计算器在线工具 xff0c 可以简单快速地获取各RAID需要的硬盘 xff0c 可用容量 以下地址任意打开一个即可快速获取RAID硬盘 容量 好用的工具就是要给大家一起分享 https www synology cn zh cn
  • C++代码自动检测工具clang-format和clang-tidy

    文章目录 96 clang format 96 安装方法命令格式使用案例更多关于 96 clang format 96 96 clang tidy 96 简单介绍检测原理安装方法使用方法更多关于 96 clang tidy 96 clang