本文档详细说明项目中 .clang-format 文件的各项配置规则及其效果。
基本语言配置
| 配置项 |
当前值 |
说明 |
效果 |
Language |
Cpp |
语言类型,也适用于C语言 |
使用C++/C语言的格式化规则 |
Standard |
Latest |
使用最新的语言标准 |
支持最新的语法特性格式化 |
ColumnLimit |
120 |
每行最大字符数 |
超过120字符自动换行 |
对齐配置
| 配置项 |
当前值 |
说明 |
示例 |
AccessModifierOffset |
-2 |
访问修饰符缩进 |
public: 相对类缩进-2个空格 |
AlignAfterOpenBracket |
Align |
开括号后内容对齐 |
参数与开括号对齐 |
AlignConsecutiveAssignments |
true |
连续赋值语句对齐 |
= 号垂直对齐 |
AlignConsecutiveDeclarations |
true |
连续变量声明对齐 |
变量名垂直对齐 |
AlignConsecutiveMacros |
true |
连续宏定义对齐 |
宏名垂直对齐 |
AlignEscapedNewlines |
Left |
续行反斜杠对齐方式 |
反斜杠左对齐 |
AlignOperands |
true |
操作数对齐 |
多行表达式操作数对齐 |
AlignTrailingComments |
true |
尾随注释对齐 |
行尾注释垂直对齐 |
对齐效果示例
连续赋值对齐:
1 2 3 4
| int x = 10; double value = 3.14; char *name = "test";
|
连续声明对齐:
1 2 3 4
| int count; double ratio; Button_t *button;
|
单行限制配置
| 配置项 |
当前值 |
说明 |
效果 |
AllowShortBlocksOnASingleLine |
Never |
禁止短代码块单行 |
if (x) { y = 1; } → 必须换行 |
AllowShortCaseLabelsOnASingleLine |
false |
禁止短case标签单行 |
case语句必须换行 |
AllowShortFunctionsOnASingleLine |
None |
禁止短函数单行 |
所有函数都必须换行 |
AllowShortIfStatementsOnASingleLine |
Never |
禁止短if语句单行 |
if语句必须换行 |
AllowShortLoopsOnASingleLine |
false |
禁止短循环单行 |
for/while循环必须换行 |
单行限制示例
禁止短if语句单行:
1 2 3 4 5 6
|
if (condition) { action(); }
|
换行配置
| 配置项 |
当前值 |
说明 |
效果 |
AlwaysBreakAfterDefinitionReturnType |
None |
函数定义返回类型换行 |
返回类型和函数名同行 |
AlwaysBreakAfterReturnType |
None |
函数声明返回类型换行 |
返回类型和函数名同行 |
AlwaysBreakBeforeMultilineStrings |
false |
多行字符串前不换行 |
字符串紧跟赋值符 |
BreakBeforeBraces |
Allman |
大括号换行风格 |
大括号独占一行 |
BreakBeforeBinaryOperators |
None |
二元运算符换行位置 |
运算符在行末 |
BreakBeforeTernaryOperators |
false |
三元运算符换行位置 |
? 和 : 在行末 |
BreakStringLiterals |
true |
允许字符串字面量换行 |
长字符串可以换行 |
大括号风格示例
Allman 风格:
1 2 3 4 5 6 7 8
| void function() { if (condition) { } }
|
参数和装箱配置
| 配置项 |
当前值 |
说明 |
效果 |
AllowAllArgumentsOnNextLine |
false |
禁止所有参数换到下一行 |
参数分行显示 |
AllowAllParametersOfDeclarationOnNextLine |
false |
禁止所有参数换到下一行 |
函数参数分行显示 |
BinPackArguments |
false |
禁止参数装箱 |
每个参数独占一行 |
BinPackParameters |
false |
禁止参数装箱 |
每个参数独占一行 |
参数格式化示例
禁止参数装箱效果:
1 2 3 4 5 6 7 8 9
| function_call( argument1, argument2, argument3 );
|
缩进配置
| 配置项 |
当前值 |
说明 |
效果 |
IndentWidth |
4 |
缩进宽度 |
使用4个空格缩进 |
IndentCaseLabels |
true |
case标签缩进 |
case相对switch缩进 |
IndentWrappedFunctionNames |
true |
换行函数名缩进 |
换行的函数名缩进 |
TabWidth |
4 |
Tab宽度 |
Tab等于4个空格 |
UseTab |
Never |
不使用Tab |
始终使用空格 |
换行惩罚权重
| 配置项 |
当前值 |
说明 |
作用 |
PenaltyBreakBeforeFirstParameter |
5 |
函数定义换行惩罚 |
降低函数参数换行倾向 |
PenaltyBreakBeforeFirstCallParameter |
5 |
函数调用换行惩罚 |
降低函数调用换行倾向 |
PenaltyBreakAssignment |
10 |
赋值换行惩罚 |
降低赋值运算符换行倾向 |
PenaltyExcessCharacter |
100 |
超出字符惩罚 |
每个超出字符的惩罚值 |
PenaltyReturnTypeOnItsOwnLine |
0 |
返回类型独行惩罚 |
不惩罚返回类型独行 |
其他格式化配置
| 配置项 |
当前值 |
说明 |
效果 |
PointerAlignment |
Right |
指针星号对齐 |
char *ptr 星号靠近变量名 |
ReflowComments |
true |
重新格式化注释 |
自动调整注释格式 |
SortIncludes |
true |
排序包含文件 |
自动排序#include |
MaxEmptyLinesToKeep |
1 |
最大空行数 |
最多保留1个空行 |
KeepEmptyLinesAtTheStartOfBlocks |
false |
块开始处不保留空行 |
{ 后不允许空行 |
空格配置
| 配置项 |
当前值 |
说明 |
示例 |
SpaceAfterCStyleCast |
true |
C风格转换后加空格 |
(int) x |
SpaceAfterLogicalNot |
false |
逻辑非后不加空格 |
!condition |
SpaceBeforeAssignmentOperators |
true |
赋值运算符前加空格 |
x = y |
SpaceBeforeParens |
ControlStatements |
控制语句圆括号前加空格 |
if (condition) |
SpacesBeforeTrailingComments |
1 |
尾随注释前空格数 |
code; // comment |
SpacesInParentheses |
false |
圆括号内不加空格 |
function(arg) |
SpacesInSquareBrackets |
false |
方括号内不加空格 |
array[index] |
包含文件优先级
1 2 3 4 5 6 7 8 9 10 11
| IncludeCategories: - Regex: '"*PlatformIO.h"' Priority: -5 - Regex: '"*TextIOTypes.h"' Priority: -4 - Regex: "<[Ww]indows.h>" Priority: -3 - Regex: '<*\/.h>' Priority: -2 - Regex: '"*\/.h"' Priority: 1
|
排序效果:
1 2 3 4 5 6 7 8
| #include "PlatformIO.h" #include "TextIOTypes.h" #include <Windows.h> #include <stdio.h> #include <stdlib.h> #include "button.h" #include "config.h"
|
项目适配说明
当前配置针对嵌入式C项目优化:
- 可读性优先: 大括号独占一行,参数分行显示
- 一致性: 自动对齐声明、赋值、注释
- 紧凑性: 120列限制,适合代码审查
- 规范性: 统一的空格、缩进规则
- 维护性: 自动排序包含文件,重新格式化注释
这套配置确保代码风格统一,提高团队协作效率。