.clang-format配置语法
官网:Clang格式样式选项 — Clang 17.0.0git 文档 (llvm.org)
https://clang.llvm.org/docs/ClangFormatStyleOptions.html
有人翻译后转载了
Clang-Format Style Options[翻译] - 简书 (jianshu.com)
https://www.jianshu.com/p/5dea6bdbbabb
用法举例:

注意冒号后面要有一个空格
至于如何使用,自己搜,这个容易搜:如使用 clang-format 进行 C++ 代码风格管理 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/514541589
下面是本人根据文档,按空格、对齐、换行、缩进分类设置了自己喜欢的风格的效果图和代码,给同样喜欢的有缘人

.clang-format:
--- # BaseOnStyle: llvm # BaseOnStyle: Chromium # BaseOnStyle: Google # BaseOnStyle: Mozilla # BaseOnStyle: WebKit # BaseOnStyle: Microsoft BaseOnStyle: GNU # BaseOnStyle: Visual Studio # BaseOnStyle: # BaseOnStyle: # BaseOnStyle: # Language: Cpp #空格 # 花括号列表内是否没有空格 Cpp11BracedListStyle: true # Cpp11BracedListStyle: false # 在@property后加空格 ObjCSpaceAfterProperty: false # 类型转换后插入空格 SpaceAfterCStyleCast: false # =前移除空格 SpaceBeforeAssignmentOperators: false # 在用于初始化对象的C ++ 11括号列表之前插入空格 SpaceBeforeCpp11BracedList: false # 在构造函数初始化器冒号之前将删除空格 SpaceBeforeCtorInitializerColon: false # 如果为false,则在继承冒号之前将删除空格。 SpaceBeforeInheritanceColon: false # 在左括号前插入空格的情况, # Never 永远不会在左括号前插入空格 #ControlStatements 在控制语句关键字(for / if / while ...)之后的左括号前插入一个空格 #Always 总是在左括号前插入一个空格 SpaceBeforeParens: Never # 如果为false,在基于范围的for循环冒号之前将删除空格 SpaceBeforeRangeBasedForLoopColon: false # 如果为true,则可以在()中插入空格。 SpaceInEmptyParentheses: false # 尾随行注释(//)之前的空格数 SpacesBeforeTrailingComments: 0 # 如果为true,则会在模板参数列表中的<之后和>之前插入空格 SpacesInAngles: false # 如果为true,则可以将空格插入到C语言样式的类型转换中。 SpacesInCStyleCastParentheses: false # 如果为true,则在字面量容器内插入空格(例如ObjC和JavaScript里的array和dict) SpacesInContainerLiterals: false # 如果为true,则在'('之后,')'之前插入空格。 SpacesInParentheses: false # 如果为true,则在"["之后,"]"之前插入空格, Lambdas或未指定大小的数组声明不会受到影响。 SpacesInSquareBrackets: false # 对齐 # 如果设置了这个选项,则在左括号后进行水平对齐 # 这同样适用于圆括号,尖括号,方括号,() <> [] # 换行规则根据最大代码列数ColumnLimit来判断 # BAlign 对齐括号里的参数 # DontAlign 不对齐,而是使用缩进ContinuationIndentWidth对齐,比如ContinuationIndentWidth=4 # AlwaysBreak 如果参数不适合单行,则在左括号后换行 AlignAfterOpenBracket: Align # 如果为true,则对齐连续行的赋值操作符 AlignConsecutiveAssignments: true # 如果为true,则对齐连续行的声明的变量 AlignConsecutiveDeclarations: true # 用于在转义换行符中对齐反斜杠的选项 # DontAlign 不对齐反斜杠 # Left 尽可能的远的对齐反斜杠 # Right 在最大列处对齐反斜杠 AlignEscapedNewlines: Left # 如果为true,则水平对齐二元或三元表达式 # 具体来说,这将对齐需要拆分成多行的单行表达式 AlignOperands: true # 如果为ture,则对齐注释 AlignTrailingComments: true # 指针*对齐样式 Left Right Middle PointerAlignment: Left # 换行 # 如果函数不适合一行展示,将函数的所有参数放到下一行,即使BinPackParameters为false AllowAllParametersOfDeclarationOnNextLine: false # 函数中,返回声明的样式 # ps:一般设置None,因为返回值声明后需要换行很少见 # None 意味着不换行 All 返回值声明后总是要换行 # TopLevel 总是在全局函数声明的返回值后换行 # AllDefinitions 总是在实现的函数返回值定义处换行 # TopLevelDefinitions 总是在全局函数里的已实现函数的返回值处换行 AlwaysBreakAfterReturnType: None # 如果为true,则在多行定义字符串之前换行 AlwaysBreakBeforeMultilineStrings: false # 要使用的模板声明中的换行样式 # No 在声明之前不强制换行 # MultiLine 仅在以下声明跨越多行时才强制在模板声明之后换行 # Yes 总是在模板声明后换行 AlwaysBreakTemplateDeclarations: No # 控制着花括号的样式 BreakBeforeBraces: Custom # 控制着花括号的样式 如果想要这个选项生效,必须将BreakBeforeBraces设置为Custom BraceWrapping: # AfterClass 决定类定义处换行 AfterClass: false # AfterControlStatement决定在(if/for/while/switch/@autoreleasepool/@synchronized..)处换行 AfterControlStatement: false # AfterEnum决定在枚举定义处换行 AfterEnum: false # AfterFunction决定在方法定义处换行 AfterFunction: false # AfterNamespace决定在命名空间定义处换行 AfterNamespace: false # AfterObjCDeclaration决定在ObjC定义处(interfaces,implementations)是否换行 AfterObjCDeclaration: false # AfterStruct决定在结构体定义处是否换行 AfterStruct: false # AfterUnion决定在联合体定义处是否换行 AfterUnion: false # AfterExternBlock决定在extern处是否换行 AfterExternBlock: false # BeforeCatch决定在try-catch的catch前是否换行 BeforeCatch: false # BeforeElse决定在else前是否换行 BeforeElse: false # IndentBraces花括号自身缩进 IndentBraces: false # 如果值为false,那么空函数体可以放在一行;如果想要值为false时生效,必须使AfterFunction为true并且AllowShortFunctionsOnASingleLine为None SplitEmptyFunction: false # SplitEmptyRecord如果为false,则可以将例如class/struct/union空实现放入单独一行;如果想要值为false时生效,必须使AfterClass为true SplitEmptyRecord: false # SplitEmptyNamespace如果为false,则可以使空的命名空间实现放在一行, 如果想要值为false时生效,必须使AfterNamespace为 true SplitEmptyNamespace: false # 二元运算符的格式控制 # None 在二元操作符之后换行 # NonAssignment 在二元操作符之前换行,赋值运算符''=''除外 # All 在所有的二元操作符之前换行 BreakBeforeBinaryOperators: NonAssignment # 控制括号换行风格 # Attach 始终将括号依附在上下文当中 # Linux 类似Attach,但是在function,namespace,class定义的括号前换行 # Mozilla 类似Attach,但是在enum,function,record的括号前换行 # Stroustrup 类似Attach,但是在function,catch,else前换行 # Allman 总是在括号前换行 # GUN BreakBeforeBraces: Attach # 如果为true,则在三元算符之前换行 BreakBeforeTernaryOperators: true # 控制构造初始化函数样式 # BeforeColon 在冒号之前逗号之后换行 # BeforeComma 在冒号和逗号之前换行,并对其逗号和冒号 # AfterColon 在冒号和逗号之前换行 BreakConstructorInitializers: AfterColon # 控制多继承样式 # BeforeColon 在冒号之前逗号之后换行 # BeforeComma 在冒号和逗号之前换行,并对其逗号和冒号 # AfterColon 在冒号和逗号之前换行 BreakInheritanceList: AfterColon # 是否允许在字符串常量中换行 BreakStringLiterals: false # CompactNamespaces # 如果为true,则连续的名称空间声明将在同一行上。 如果为false,则在新的一行上声明每个名称空间。 CompactNamespaces: true # 当true,如果构造函数初始化不适合一行显示,则每个初始化器独占一行 ConstructorInitializerAllOnOneLineOrOnePerLine: true # 决定JavaScript 的import/export声明是否需要换行 JavaScriptWrapImports: true # 缩进 # 设置制表符(\t)的列数 TabWidth: 4 # Never)从不使用制表符 # ForIndentation) ,只在缩进时,使用制表符 # ForContinuationAndIndentation 仅使用制表符用于连续行和缩进。 # Always) ,每当我们需要填充至少从一个制表位到下一个制表位的空白时,请使用制表符 UseTab: Never # 访问修饰符的缩进 AccessModifierOffset: 0 # 用于设定构造函数和多继承的缩进长度 ConstructorInitializerIndentWidth: 2 # 连续行的缩进长度 ContinuationIndentWidth: 4 # IndentCaseLabels # 如果值为false,则使用与switch语句相同的缩进,case的语句缩进总是比case本身高一级; IndentCaseLabels: true # 控制预处理指令缩进样式 # None 不做任何缩进 # AfterHash 在hash(#if,#ifdef,#ifndef,#elif,#else,#endif)后缩进 IndentPPDirectives: AfterHash # 缩进的列数 IndentWidth: 4 # 如果为true,函数的定义或声明在返回值类型之后换行,则缩进 IndentWrappedFunctionNames: true # namespaces的缩进 # None 不缩进 # Inner 只在嵌套的namespaces中缩进 # All 所有的namespaces都缩进 NamespaceIndentation: All # 控制ObjC的代码块(Block)实现的缩进 ObjCBlockIndentWidth: 4 # ObjC里,在@property后加空格 ObjCSpaceAfterProperty: false # 代码最大列数,值为0意味着不限制; ColumnLimit: 0 # 不同的枚举值,可以决定短方法的不同样式 # None 永不将函数合并为一行 # InlineOnly 只合并定义在class中的短方法 # Empty 只合并空函数 # Inline 只合并定义在class中的短方法,和空方法 # All 合并所有适合一行展示的函数 AllowShortFunctionsOnASingleLine: All # Cpp03 使用C ++ 03兼容语法。 # Cpp11) 使用它 C++11, C++14 , C++1z的特性(例如A<A<int>>来兼容 A<A<int> >) # Auto 基于输入自动检测。 Standard: Cpp11 # linux内核样式类似的样式 # BasedOnStyle: LLVM # IndentWidth: 8 # UseTab: Always # BreakBeforeBraces: Linux # AllowShortIfStatementsOnASingleLine: false # IndentCaseLabels: false # 默认Visual Studio格式样式的类似样式 # UseTab: Never # IndentWidth: 4 #BreakBeforeBraces: Allman我不喜欢,我喜欢attach # BreakBeforeBraces: Allman # AllowShortIfStatementsOnASingleLine: false # IndentCaseLabels: false # ColumnLimit: 0