Clang-Format 通过配置文件统一 C++ 风格,支持预设风格(如 Google)、自定义规则(如 PointerAlignment、BreakBeforeBraces)、编辑器集成及 CI 自动检查。
用 Clang-Format 统一 C++ 代码风格,核心是写好配置文件(.clang-format)并集成到编辑器或构建流程中。它能自动格式化缩进、空格、换行、括号位置等,避免团队因风格差异引发的无意义争论。
Clang-Format 提供多种预设风格(如 Google、LLVM、Chromium、Mozilla、WebKit),适合快速上手。例如,在项目根目录运行:
clang-format -style=google -dump-config > .clang-format
这会生成一份基于 Google 风格的完整配置。你可以直接使用,也可在此基础上微调。常用可调项包括:
Never)Attach 或 Linux)Empty,即仅空函数可单行)不同项目可能有特殊要求(比如强制指针符号 * 靠左、统一模板尖括号空格)。可在 .clang-format 中显式覆盖:
PointerAlignment: Left SpaceBeforeParens: ControlStatements SpacesBeforeTrailingComments: 2 Cpp11BracedListStyle: true
注意:Clang-Format 不支持条件规则(如“仅对头文件生效”),如需差异化处理,可用 -assume-filename 配合脚本,或借助 BasedOnStyle + 局部 override 实现粗粒度区分。
格式化单个文件:
clang-format -i main.cpp
格式化整个目录(配合 find):
find . -name "*.cpp" -o -name "*.h" | xargs clang-format -i
主流编辑器均支持实时格式化:
C_Cpp.formatting,并指定 clang-format 路径和配置文件位置vim-clang
-format 或 neoformat 插件,绑定快捷键触发在 CI 流程中加入格式校验,可防止不合规代码合入主干。例如 GitHub Actions 中添加步骤:
- name: Check clang-format
run: |
git clone --depth 1 https://github.com/llvm/llvm-project.git
./llvm-project/clang/tools/clang-format/clang-format-diff.py -p1 -i <(git diff -U0 HEAD~1)
更轻量做法是用 --dry-run --Werror 检查是否有不一致:
clang-format -n --Werror $(git ls-files '*.cpp' '*.h')
若失败则中断流水线,提示开发者先运行 clang-format -i 修复。