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

6 篇文章 0 订阅
5 篇文章 1 订阅

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静态语义检查,安装、使用、检查项注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值