您的位置:

clangformat——代码规范的最好伙伴

一、clangformat配置

clangformat是来自于LLVM开发团队的一个基于clang的代码格式化工具,用于统一代码的风格,使代码具备良好的可读性和可维护性。

使用clangformat之前,需要进行配置,配置文件一般命名为“.clang-format”,位于项目根目录或用户目录下。下面是一份针对C++项目的配置文件示例:

BasedOnStyle: Google # 使用Google代码风格为基准进行配置
IndentWidth: 4 # 缩进宽度为4个空格
AccessModifierOffset: -4 # private, protected, public之间的缩进
KeepEmptyLinesAtTheStartOfBlocks: false # 块开始处不保留空行
KeepEmptyLinesAtTheEndOfBlocks: false # 块结尾处不保留空行
AllowShortIfStatementsOnASingleLine: true # 允许if语句在一行显示
BreakBeforeBinaryOperators: All # 所有二元运算符前都添加换行符
PointerAlignment: Left # 指针与类型左对齐
AlignTrailingComments: true # 对齐注释

clangformat支持多种代码风格,只需要将“BasedOnStyle”设置成相应的代码风格名即可。常用的代码风格还包括Google、Chromium、LLVM等。

二、clangformat vs

与其他的代码格式化工具相比,clangformat具备以下的优势:

1. 完全免费

clangformat是开源的,完全免费,用户可以自由地使用、修改、分享、发布它。

2. 配置灵活

在配置文件中,用户可以针对自己的项目和个人习惯,对代码格式化进行灵活的配置。

3. 支持多个编程语言

clangformat不仅支持C++代码的格式化,还支持其他的编程语言,包括C、Objective-C、Java等。

三、clangformat下载

clangformat本身是作为clang的一部分打包发布的,因此只需要下载、安装clang即可使用clangformat。

在Linux系统中,可以通过以下命令进行安装:

sudo apt-get install clang

在Windows系统中,可以从以下网址下载clang的Windows版本:

https://releases.llvm.org/download.html

四、clangformat自定义

如果配置文件中没有涵盖到需求,用户可以使用clangformat提供的命令行选项、环境变量或API进行定制化。下面是一些重要的选项:

1. -style

通过该选项指定代码风格名,可以覆盖配置文件中的设置:

clang-format -style=Google -i some_file.cpp

2. -assume-filename

当clangformat无法确定目标文件的类型时,可以使用该选项指定文件类型:

clang-format -style=Google -assume-filename=sample.h -i some_file

3. -dump-config

该选项会输出clangformat的完整配置,包括默认设置和用户自定义设置:

clang-format -style=Google -dump-config > .clang-format

五、clangformat qt

Qt是C++程序开发中的一个流行框架,clangformat也已经为Qt提供了专门的配置文件。下面是一份基于Qt的配置文件示例:

# .clang-format file for Qt projects
BasedOnStyle: Qt
IndentWidth: 4
TabWidth: 4
UseTab: Never
AlignTrailingComments: true
BreakBeforeBraces: Allman
AllowShortIfStatementsOnASingleLine: true

六、clangformat 头文件

头文件也是代码中不可或缺的一部分,clangformat提供了选项来配置头文件的排列。下面是一份头文件排列的配置文件示例:

BasedOnStyle: Google
SortIncludes: true
IncludeCategories:
  - Regex: '^"(llvm|clang|gtest|gmock|sqlite3|Catch).h"'
    Priority: 2
  - Regex: '^(<|"(gtest|gmock)/)'
    Priority: 3
  - Regex: '^"'
    Priority: 1
  - Regex: '.*'
    Priority: 4
    

上述配置文件中,头文件被分为四个类别,Priority的值越小,优先级越高。正则表达式用于匹配不同的头文件。

上述代码示例均为参考示例,具体的配置文件需要根据实际项目需要进行调整。

clangformat——代码规范的最好伙伴

2023-05-18
印象笔记记录java学习(Java成长笔记)

2022-11-12
python学习日记day4(大学python笔记整理)

2022-11-13
python个人学习笔记1(python笔记总结)

2022-11-11
js数组代码规范,js数组写法

本文目录一览: 1、关于JS代码书写规范问题,我是JS初学者 2、学习Web前端要知道的JavaScript基础语法规则 3、JAVASCRIPT代码书写规则 4、编写JS代码:创建一个二维数组(10

2023-12-08
java方法整理笔记(java总结)

2022-11-08
代码管理规范

2023-05-18
java基础知识学习笔记一,Java基础笔记

2022-11-21
java学习笔记(java初学笔记)

2022-11-14
数据库的笔记mysql,数据库管理系统笔记

2022-11-24
java笔记,大学java笔记

2022-11-28
web前端js代码加在哪(js代码在哪写)

本文目录一览: 1、web控制按钮的代码在哪 2、项目前端js基础代码包括哪些方面的东西?一般都怎样写? 3、学习Web前端要知道的JavaScript基础语法规则 4、【Web前端基础】JavaSc

2023-12-08
java客户端学习笔记(java开发笔记)

2022-11-14
java笔记,尚硅谷java笔记

2022-12-01
重学java笔记,java笔记总结

2022-11-23
web前端js变量(js变量有哪些)

本文目录一览: 1、Web前端开发知识点之JavaScript的介绍与语法 2、Web前端工程师要知道的JavaScript变量命名规范 3、学习Web前端要知道的JavaScript基础语法规则 4

2023-12-08
java包笔记,Java语言包

2022-11-18
最新python学习笔记3,python基础笔记

2022-11-17
了解js代码实现规则,js代码规范七大原则

本文目录一览: 1、js文件中代码怎么实现? 2、JS代码是什么 3、如何写出规范的JavaScript代码 4、地址栏中可以执行 JavaScript 代码,这是如何实现的? js文件中代码怎么实现

2023-12-08
python基础学习整理笔记,Python课堂笔记

2022-11-21