问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

代码格式化工具:clang-format

创作时间:
作者:
@小白创作中心

代码格式化工具:clang-format

引用
CSDN
1.
https://blog.csdn.net/KXue0703/article/details/139582523

平时团队进行合作的时候需要注意代码的格式,虽然很难统一每个人的编码风格,但是通过工具能够很好的管理代码格式。clang-format,它是基于clang的一个命令行工具,能够自动化格式C/C++/Obj-C代码,支持多种代码风格:Google、Chromium、LLVM、Mozilla、WebKit,也支持自定义风格(通过编写.clang-format文件)很方便的统一代码格式。

1. 获取clang-format

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

如上图所示,LLVM有很多的版本,且其更新较快,我们可以选择其中的一个版本进行下载,点“page”进入下载界面,如下:

将该文件下载下来之后,直接双击安装即可,安装完毕会在安装目录看到如下:

对于使用vscode的开发者而言,不需要单独去下载此执行文件,因为在vscode中按照c/c++插件时,已经默认安装了clang-format可执行文件。

2. 在SourceInsight中添加clang-format

  1. 在工具栏的 Tools 找到 Custom Commands,进入如下界面中:

Step1:点
Add...
,新建一个命令,取名clang-format(名称可以随便取,只要自己知道是啥意思就行)

Step2:在Run框中输入:
"C:\Program Files\LLVM\bin\clang-format.exe" -style=file -fallback-style=none -i %f
(也许clang-format.exe的安装路径不尽相同,需要按照是自己的实际安装路径写)

Step3:勾选
Save Files First

Wait Until Done

Step4:为该命令分配快捷键,点击 Custom Commands 页面右下角
Keys...
,选择刚才创建好的 Custom Cmd: clang-format,点击
Assign New Key
,此时你可以敲自己喜欢的快捷键,比如 Ctrl+Alt+F,最后点击 OK 就大功告成

Step5:敲 “Step4” 定义的快捷键,就可以对当前的文件格式化了(当前目录或者更上级目录要存在 .clang-format

3. 在VS Code中添加clang-format

Step1:安装C/C++插件(这个插件在vscode中基本属于必装的插件)

Step2:设置 / 扩展 / C/C++ / 格式设置

Step3:勾选“Editor:Format On Save”,这样没当文件保存(ctrl+s)就会调用 clang-format.exe 去格式化代码了(当前目录或者更上级目录要存在 .clang-format)。

4. 格式化脚本.clang-format

更详细的命令解释可参考官网:https://clang.llvm.org/docs/ClangFormat.html

# Format Style Options - Created with Clang Power Tools
# clang的官网:https://clang.llvm.org/docs/ClangFormatStyleOptions.html
---
# 指定基本的风格样式,实际开发时无需从头开始指定所有的格式,可以选择LLVM、Google、Chromium、Mozilla、WebKit、Microsoft、GNU
# 中的一种或多种风格,用“|”将其连接在一起
BasedOnStyle: LLVM
UseTab: Never                       # 从不使用Tab键
SortIncludes: false                 # 不对include进行排序
IndentWidth: 4                      # 缩进的空格数,这里配置默认所见4个空格
MaxEmptyLinesToKeep: 1              # 要保留的连续空行数,值为0则不关心空行数
ColumnLimit: 120                    # 列数限制,当值为0时,不对对列数进行任何的限制,当非0时,则当一行代码达到指定列数之后,开始换行
ReflowComments: true                # 是否重新排版注释,true - 重排注释,false - 不重排注释(一般只要单行超过最大列数之后才会重排)
IndentCaseLabels: true              # case相对于switch是否要缩进,true:缩进,false:不缩进
ContinuationIndentWidth: 4          # 延续下一行的缩进宽度,只原来一行放不下时,换行后,新行缩进的字符数
BreakBeforeBinaryOperators: None    # 二元操作符断行策略(在操作符之后断行)
BreakBeforeTernaryOperators: false  # 三元操作符断行规则(true:三元操作符将放在换行符之后 , false:三元操作符将放在换行符之前)
AccessModifierOffset: -4            # 访问修饰符(public、private等)的偏移字符数
AlignTrailingComments: true         # 对齐尾部注释
AlignConsecutiveAssignments: false  # 连续赋值的对其策略(可以跨过空格及注释进行对齐)
AlignConsecutiveMacros: AcrossEmptyLinesAndComments         # 连续宏定义对齐策略(可以跨过空格及注释进行对齐)
# 关于大括号的处理策略
BreakBeforeBraces : Custom          # 只有设置为Custom时,才使用它来指定应该如何处理每个独立的大括号情况。否则,它将被忽略。
BraceWrapping:
    AfterCaseLabel: true            # 在case之后大括号换行
    AfterControlStatement: true     # 对语句if/for/while/switch/...的换行风格控制,换行
    AfterExternBlock: false         # 在extern声明之后换行,这个不能换行,一旦换行,格式就不好看了
    AfterFunction: true             # 在函数定义之后大括号换行
    BeforeElse: true                # 在else之后大括号换行
    #BeforeWhile: true               # 在while之前换行
    AfterEnum: true                 # 在enum定义之后大括号换行
    AfterStruct: true               # 在struct定义之后大括号换行
    AfterUnion: true                # 在union定义之后大括号换行
    SplitEmptyFunction: false       # false:空函数体的大括号{}在一行中,ture:大括号在两行中
# 缩进Goto跳转符号,fasle:不缩进,顶格,true:缩进
IndentGotoLabels: false
# 以下是是否将代码合并到单行中的控制策略,true:合并到一行,false:不合并到一行中
AllowShortCaseLabelsOnASingleLine: false    # 对case内容的控制
AllowShortIfStatementsOnASingleLine: false  # 对if的单行控制,只有对if没有{}的语句起作用
AllowShortLoopsOnASingleLine: false         # 是否允许合并短循环到单行上
AllowShortBlocksOnASingleLine: false        # 是否允许短语法块放在单行上
AllowShortEnumsOnASingleLine: false         # 是否允许短的枚举放在一行上
AllowShortFunctionsOnASingleLine: None      # 允许短函数在单行上,可以选择以下值:None,InlineOnly,Empty,Inline,ALL
...
  

参考文档:

  1. https://clang.llvm.org/docs/ClangFormat.html
  2. https://releases.llvm.org/download.html
  3. clang-format 使用与集成介绍
  4. 【C++】Clang-Format:代码自动格式化(看这一篇就够了)
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号