.clang-format配置语法

官网:Clang格式样式选项 — Clang 17.0.0git 文档 (llvm.org)
https://clang.llvm.org/docs/ClangFormatStyleOptions.html
有人翻译后转载了
https://www.jianshu.com/p/5dea6bdbbabb
 
用法举例:

注意冒号后面要有一个空格 

至于如何使用,自己搜,这个容易搜:如使用 clang-format 进行 C++ 代码风格管理 - 知乎 (zhihu.com)

https://zhuanlan.zhihu.com/p/514541589

 

下面是本人根据文档,按空格、对齐、换行、缩进分类设置了自己喜欢的风格的效果图和代码,给同样喜欢的有缘人

 .clang-format:

(用法(给小白):见小白入门clang_format - 败人两字非傲即惰 - 博客园 (cnblogs.com)

  1 ---
  2 # BaseOnStyle: llvm
  3 # BaseOnStyle: Chromium
  4 # BaseOnStyle: Google
  5 # BaseOnStyle: Mozilla
  6 # BaseOnStyle: WebKit
  7 # BaseOnStyle: Microsoft
  8 BaseOnStyle: GNU
  9 # BaseOnStyle: Visual Studio
 10 # BaseOnStyle: 
 11 # BaseOnStyle: 
 12 # BaseOnStyle: 
 13 # Language: Cpp
 14 
 15 
 16 #空格
 17 # 花括号列表内是否没有空格
 18 Cpp11BracedListStyle: true
 19 # Cpp11BracedListStyle: false
 20 # 在@property后加空格
 21 ObjCSpaceAfterProperty: false
 22 # 类型转换后插入空格
 23 SpaceAfterCStyleCast: false
 24 # =前移除空格
 25 SpaceBeforeAssignmentOperators: false
 26 # 在用于初始化对象的C ++ 11括号列表之前插入空格
 27 SpaceBeforeCpp11BracedList: false
 28 # 在构造函数初始化器冒号之前将删除空格
 29 SpaceBeforeCtorInitializerColon: false
 30 # 如果为false,则在继承冒号之前将删除空格。
 31 SpaceBeforeInheritanceColon: false
 32 # 在左括号前插入空格的情况,
 33 # Never 永远不会在左括号前插入空格
 34 #ControlStatements 在控制语句关键字(for / if / while ...)之后的左括号前插入一个空格
 35 #Always 总是在左括号前插入一个空格
 36 SpaceBeforeParens: Never
 37 # 如果为false,在基于范围的for循环冒号之前将删除空格
 38 SpaceBeforeRangeBasedForLoopColon: false
 39 # 如果为true,则可以在()中插入空格。
 40 SpaceInEmptyParentheses: false
 41 # 尾随行注释(//)之前的空格数
 42 SpacesBeforeTrailingComments: 0
 43 # 如果为true,则会在模板参数列表中的<之后和>之前插入空格
 44 SpacesInAngles: false
 45 # 如果为true,则可以将空格插入到C语言样式的类型转换中。
 46 SpacesInCStyleCastParentheses: false
 47 # 如果为true,则在字面量容器内插入空格(例如ObjC和JavaScript里的array和dict)
 48 SpacesInContainerLiterals: false
 49 # 如果为true,则在'('之后,')'之前插入空格。
 50 SpacesInParentheses: false
 51 # 如果为true,则在"["之后,"]"之前插入空格, Lambdas或未指定大小的数组声明不会受到影响。
 52 SpacesInSquareBrackets: false
 53 
 54 
 55 
 56 # 对齐
 57 # 如果设置了这个选项,则在左括号后进行水平对齐
 58 # 这同样适用于圆括号,尖括号,方括号,() <> []
 59 # 换行规则根据最大代码列数ColumnLimit来判断
 60 # BAlign 对齐括号里的参数
 61 # DontAlign 不对齐,而是使用缩进ContinuationIndentWidth对齐,比如ContinuationIndentWidth=4
 62 # AlwaysBreak 如果参数不适合单行,则在左括号后换行
 63 AlignAfterOpenBracket: Align
 64 # 如果为true,则对齐连续行的赋值操作符
 65 AlignConsecutiveAssignments: true
 66 # 如果为true,则对齐连续行的声明的变量
 67 AlignConsecutiveDeclarations: true
 68 # 用于在转义换行符中对齐反斜杠的选项
 69 # DontAlign 不对齐反斜杠
 70 # Left 尽可能的远的对齐反斜杠
 71 # Right 在最大列处对齐反斜杠
 72 AlignEscapedNewlines: Left
 73 # 如果为true,则水平对齐二元或三元表达式
 74 # 具体来说,这将对齐需要拆分成多行的单行表达式
 75 AlignOperands: true
 76 # 如果为ture,则对齐注释
 77 AlignTrailingComments: true
 78 # 指针*对齐样式 Left Right Middle
 79 PointerAlignment: Left
 80 # 换行
 81 # 如果函数不适合一行展示,将函数的所有参数放到下一行,即使BinPackParameters为false
 82 AllowAllParametersOfDeclarationOnNextLine: false
 83 # 函数中,返回声明的样式
 84 # ps:一般设置None,因为返回值声明后需要换行很少见
 85 # None 意味着不换行  All 返回值声明后总是要换行
 86 # TopLevel 总是在全局函数声明的返回值后换行
 87 # AllDefinitions 总是在实现的函数返回值定义处换行
 88 # TopLevelDefinitions 总是在全局函数里的已实现函数的返回值处换行
 89 AlwaysBreakAfterReturnType: None
 90 # 如果为true,则在多行定义字符串之前换行
 91 AlwaysBreakBeforeMultilineStrings: false
 92 # 要使用的模板声明中的换行样式
 93 # No 在声明之前不强制换行
 94 # MultiLine 仅在以下声明跨越多行时才强制在模板声明之后换行
 95 # Yes 总是在模板声明后换行
 96 AlwaysBreakTemplateDeclarations: No
 97 # 控制着花括号的样式
 98 # 控制括号换行风格
 99 # Attach 始终将括号依附在上下文当中
100 # Linux 类似Attach,但是在function,namespace,class定义的括号前换行
101 # Mozilla 类似Attach,但是在enum,function,record的括号前换行
102 # Stroustrup 类似Attach,但是在function,catch,else前换行
103 # Allman 总是在括号前换行
104 ####################################################################################
105 BreakBeforeBraces: Custom #Allman #
106 ####################################################################################
107 # 控制着花括号的样式 如果想要这个选项生效,必须将BreakBeforeBraces设置为Custom
108 BraceWrapping:
109 # AfterClass 决定类定义处换行
110   AfterClass: false
111   # AfterControlStatement决定在(if/for/while/switch/@autoreleasepool/@synchronized..)处换行
112   AfterControlStatement: false
113   # AfterEnum决定在枚举定义处换行
114   AfterEnum: false
115   # AfterFunction决定在方法定义处换行
116   AfterFunction: false
117   # AfterNamespace决定在命名空间定义处换行
118   AfterNamespace: false
119   # AfterObjCDeclaration决定在ObjC定义处(interfaces,implementations)是否换行
120   AfterObjCDeclaration: false
121   # AfterStruct决定在结构体定义处是否换行
122   AfterStruct: false
123   # AfterUnion决定在联合体定义处是否换行
124   AfterUnion: false
125   # AfterExternBlock决定在extern处是否换行
126   AfterExternBlock: false
127   # BeforeCatch决定在try-catch的catch前是否换行
128   BeforeCatch: false
129   # BeforeElse决定在else前是否换行
130   BeforeElse: false
131   # IndentBraces花括号自身缩进
132   IndentBraces: false
133   # 如果值为false,那么空函数体可以放在一行;如果想要值为false时生效,必须使AfterFunction为true并且AllowShortFunctionsOnASingleLine为None
134   SplitEmptyFunction: false
135   # SplitEmptyRecord如果为false,则可以将例如class/struct/union空实现放入单独一行;如果想要值为false时生效,必须使AfterClass为true
136   SplitEmptyRecord: false
137   # SplitEmptyNamespace如果为false,则可以使空的命名空间实现放在一行, 如果想要值为false时生效,必须使AfterNamespace为 true
138   SplitEmptyNamespace: false
139 # 二元运算符的格式控制
140 # None 在二元操作符之后换行
141 # NonAssignment 在二元操作符之前换行,赋值运算符''=''除外
142 # All 在所有的二元操作符之前换行
143 BreakBeforeBinaryOperators: NonAssignment
144 # 控制括号换行风格
145 # Attach 始终将括号依附在上下文当中
146 # Linux 类似Attach,但是在function,namespace,class定义的括号前换行
147 # Mozilla 类似Attach,但是在enum,function,record的括号前换行
148 # Stroustrup 类似Attach,但是在function,catch,else前换行
149 # Allman 总是在括号前换行
150 # GUN
151 # BreakBeforeBraces: Attach#写过了(105行)写重复会语法错误
152 # 如果为true,则在三元算符之前换行
153 BreakBeforeTernaryOperators: true
154 # 控制构造初始化函数样式
155 # BeforeColon 在冒号之前逗号之后换行
156 # BeforeComma 在冒号和逗号之前换行,并对其逗号和冒号
157 # AfterColon 在冒号和逗号之前换行
158 BreakConstructorInitializers: AfterColon
159 # 控制多继承样式
160 # BeforeColon 在冒号之前逗号之后换行
161 # BeforeComma 在冒号和逗号之前换行,并对其逗号和冒号
162 # AfterColon 在冒号和逗号之前换行
163 BreakInheritanceList: AfterColon
164 # 是否允许在字符串常量中换行
165 BreakStringLiterals: false
166 # CompactNamespaces
167 # 如果为true,则连续的名称空间声明将在同一行上。 如果为false,则在新的一行上声明每个名称空间。
168 CompactNamespaces: true
169 # 当true,如果构造函数初始化不适合一行显示,则每个初始化器独占一行
170 ConstructorInitializerAllOnOneLineOrOnePerLine: true
171 # 决定JavaScript 的import/export声明是否需要换行
172 JavaScriptWrapImports: true
173 # 缩进
174 # 设置制表符(\t)的列数
175 TabWidth: 4
176 # Never)从不使用制表符
177 # ForIndentation) ,只在缩进时,使用制表符
178 # ForContinuationAndIndentation 仅使用制表符用于连续行和缩进。
179 # Always) ,每当我们需要填充至少从一个制表位到下一个制表位的空白时,请使用制表符
180 UseTab: Never
181 # 访问修饰符的缩进
182 AccessModifierOffset: 0
183 # 用于设定构造函数和多继承的缩进长度
184 ConstructorInitializerIndentWidth: 2
185 # 连续行的缩进长度
186 ContinuationIndentWidth: 4
187 # IndentCaseLabels
188 # 如果值为false,则使用与switch语句相同的缩进,case的语句缩进总是比case本身高一级;
189 IndentCaseLabels: true
190 # 控制预处理指令缩进样式
191 # None 不做任何缩进
192 # AfterHash 在hash(#if,#ifdef,#ifndef,#elif,#else,#endif)后缩进
193 IndentPPDirectives: AfterHash
194 # 缩进的列数
195 IndentWidth: 4
196 # 如果为true,函数的定义或声明在返回值类型之后换行,则缩进
197 IndentWrappedFunctionNames: true
198 # namespaces的缩进
199 # None 不缩进
200 # Inner 只在嵌套的namespaces中缩进
201 # All 所有的namespaces都缩进
202 NamespaceIndentation: All
203 # 控制ObjC的代码块(Block)实现的缩进
204 ObjCBlockIndentWidth: 4
205 # ObjC里,在@property后加空格
206 # ObjCSpaceAfterProperty: false #写过了(21行)写重复会语法错误
207 # 代码最大列数,值为0意味着不限制;
208 ColumnLimit: 0
209 # 不同的枚举值,可以决定短方法的不同样式
210 # None 永不将函数合并为一行
211 # InlineOnly 只合并定义在class中的短方法
212 # Empty 只合并空函数
213 # Inline 只合并定义在class中的短方法,和空方法
214 # All 合并所有适合一行展示的函数
215 AllowShortFunctionsOnASingleLine: None
216 # Cpp03 使用C ++ 03兼容语法。
217 # Cpp11) 使用它 C++11, C++14 , C++1z的特性(例如A<A<int>>来兼容 A<A<int> >)
218 # Auto 基于输入自动检测。
219 Standard: Cpp11
220 # linux内核样式类似的样式
221 # BasedOnStyle: LLVM
222 # IndentWidth: 8
223 # UseTab: Always
224 # BreakBeforeBraces: Linux
225 # AllowShortIfStatementsOnASingleLine: false
226 # IndentCaseLabels: false
227 # 默认Visual Studio格式样式的类似样式
228 # UseTab: Never
229 # IndentWidth: 4
230 #BreakBeforeBraces: Allman我不喜欢,我喜欢attach
231 # BreakBeforeBraces: Allman
232 # AllowShortIfStatementsOnASingleLine: false
233 # IndentCaseLabels: false
234 # ColumnLimit: 0

 

posted @ 2023-07-16 18:38  败人两字非傲即惰  阅读(791)  评论(1编辑  收藏  举报