.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