首页/开发/代码质量与评审速查/clang-format:C/C++ 格式化
规范与静态检查65 条

clang-format:C/C++ 格式化

clang-format 按 .clang-format 配置格式化 C/C++ 等语言:内置 LLVM、Google、Chromium、Mozilla、WebKit、Microsoft 等基座风格,可局部覆盖选项。

clang-format 是什么

clang-format 按仓库根目录或子目录里的 .clang-format 配置格式化 C、C++ 等语言代码。它内置若干基座风格:LLVM、Google、Chromium、Mozilla、WebKit、Microsoft,选定基座后再覆盖少量选项即可,不必逐条手写全部格式规则。

基本信息

基座风格LLVM / Google / Chromium / Mozilla / WebKit / Microsoft
配置文件.clang-format,含 BasedOnStyle 与覆盖项
常用命令clang-format -i 就地格式化,--dry-run 只检查不改
适用范围C、C++、Java、JavaScript、Protobuf 等

典型使用场景

  • 项目初始化:选一个基座风格,把配置文件提交进仓库
  • 提交前统一格式:配合钩子只对暂存文件就地格式化
  • CI 检查:用 dry-run 让格式不合规的改动直接失败
  • 局部例外:生成代码或特定目录用子配置与禁用注释处理
  • 历史文件逐步纳入:按目录分批启用,避免一次性巨量重排

配置原则

  • 先选基座,再只改确有必要的几项
  • 调整列宽与缩进这类全局项要格外谨慎
  • 子目录配置只用于确有必要的例外场景
  • 工具版本写进工具链,避免升级后全库重排

配置与命令

配置与命令
BasedOnStyle: Google
ColumnLimit: 100
IndentWidth: 4
# 就地格式化:clang-format -i src/main.cpp
# 只检查不改:clang-format --dry-run --Werror src/main.cpp

常用选项

选项作用注意事项
BasedOnStyle选择基座风格切换基座会导致全库重排
ColumnLimit每行最大列数影响面广,最好一次定下来
IndentWidth缩进宽度与 EditorConfig 的取值保持一致
SortIncludes是否排序 include与其它工具的顺序约定要对齐
选定基座后尽量少改选项:每多加一项覆盖,被重排的历史文件范围就扩大一圈。
格式化工具的价值在于消除分歧:同一份配置跑出来的结果是唯一的,评审时就不必再讨论换行该放在哪里。
把格式化与代码评审分开:格式化单独成一次提交,评审者才看得清哪些是真正的逻辑改动。
每个目录各自为政的 .clang-format:跨目录复用的代码被反复重排,评审负担陡增。

易错点

  • 每个目录各自为政的配置:跨目录复用的代码被反复重排
  • 基座风格来回切换:历史文件大规模重排,评审负担陡增
  • 工具版本不锁:升级后格式规则变化,全库差异激增
  • 把格式化与逻辑改动混在一次提交:真实变化被差异噪声淹没
  • 格式检查只在本地跑:开发者编辑器设置不同,CI 上仍然会因为格式差异而失败

数据来源与参考

  • clang-format 官方文档(clang.llvm.org)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌