如何通过clang-format实现两行式if语句格式化
配置clang-format匹配团队C++代码风格
团队需要为大型类库设置代码格式检查,要求遵循特定的C++代码风格,核心规则及示例如下:
核心风格示例:
if(statementIsTrue) { printf("True"); } else { anExampleBlock = true; elsestatement.function(); }补充完整示例:
/** * 仅为格式示例,无实际功能 */ bool testFunction(int largeNumber, int randomNumber) { for (int j = 0; j < largeNumber; j++) { if (j == randomNumber) { return true; } else { print("not found"); } } } int main() { // 整体缩进为3个空格,禁止使用制表符 // if/else if/for/while等关键字与(之间需有一个空格 if (testFunction(testParm1, testParm2)) { print("Hello"); return true; } }
具体规则总结
- 所有代码块(if、函数、类等)的开括号必须单独换行
- 单行if/else块采用“两行式”:条件行独立,花括号行内包含语句,且花括号内前后各留2个空格,语句分号与闭括号间也留2个空格
- 整体缩进为3个空格,禁止使用制表符
if/else if/for/while等关键字与后续(之间必须有一个空格- 单行if块的花括号缩进2个空格,与else语句对齐
对应的clang-format配置
创建或修改项目根目录下的.clang-format文件,添加以下配置:
BasedOnStyle: None IndentWidth: 3 UseTab: Never BreakBeforeBraces: Allman AllowShortBlocksOnASingleLine: false AllowShortIfStatementsOnASingleLine: Never SpaceAfterKeywords: true SpacesInParentheses: false SpaceBeforeParens: ControlStatements IndentCaseLabels: false SpacesInBraces: Custom SpacesInBracesPatterns: - Pattern: '^\{[ \t]*[^}]+[ \t]*\}$' Spaces: 2
配置项说明
BasedOnStyle: None:禁用默认风格,完全自定义配置IndentWidth: 3:设置整体缩进为3个空格UseTab: Never:强制使用空格缩进,禁止制表符BreakBeforeBraces: Allman:所有代码块的开括号单独换行,符合Allman括号风格AllowShortBlocksOnASingleLine: false:禁止短代码块(如else块)合并到一行AllowShortIfStatementsOnASingleLine: Never:强制单行if语句拆分为两行(条件一行,花括号一行)SpaceAfterKeywords: true:在控制语句关键字后添加一个空格SpacesInParentheses: false:括号内部不添加空格,保持if(...)的格式SpaceBeforeParens: ControlStatements:仅在控制语句关键字与(之间添加空格SpacesInBraces: Custom+SpacesInBracesPatterns:匹配单行花括号块,设置内部前后各留2个空格,实现{ return true; }的效果
将上述配置应用到代码后,即可自动格式化出符合团队要求的代码样式。
内容的提问来源于stack exchange,提问作者Ska
相关产品推荐
相关产品推荐

