背景
在使用vscode/cursor等各种vs系代码编辑器(配合AI Agent)时,当使用 clangd 作为C++的格式化引擎时,会出现格式化风格与 visual studio 代码格式化风格不一致情况,而且还会出现 #include "stdafx.h"/ #include "pch.h" 预处理器头文件(如果有)包含顺序被调整到其他头文件后面,这是问题,很严重。
解决
项目根目录下配置一个 .clang-format 格式化配置:
# 基础风格,建议基于 LLVM
BasedOnStyle: LLVM
# 1. 缩进使用制表符,宽度为 4
UseTab: Always
IndentWidth: 4
TabWidth: 4
# 2. 所有花括号必须换行 (Allman 风格)
BreakBeforeBraces: Allman
# 3. if 语句块即便只有一行,也要强制换行且使用 {} 包裹
AllowShortBlocksOnASingleLine: Never
AllowShortIfStatementsOnASingleLine: Never
# 5. 禁止短函数折叠为单行
AllowShortFunctionsOnASingleLine: None
# 4. namespace 内部全体缩进
NamespaceIndentation: All
# 6. 访问修饰符(public/private/protected)回退一个完整缩进级别
AccessModifierOffset: -4
# 7. #include 排序:开启排序,但保证 pch.h 永远在最前
SortIncludes: CaseSensitive
IncludeCategories:
# 预编译头 pch.h — 最高优先级(数字最小)
- Regex: '"pch\.h"'
Priority: -1
- Regex: '"stdafx\.h"'
Priority: -1
# 系统 / 第三方头文件
- Regex: "<.*>"
Priority: 1
# 其他项目内头文件
- Regex: '".*"'
Priority: 2
# 其他常用建议优化
ColumnLimit: 100