当前位置: 首页 > article >正文

clang-format安装配置与vscode支持

clang-format安装

sudo apt install clang-format

 vscode插件安装

插件商店搜索 clang-format

clang-format使用

输入以下命令就会按照llvm的格式在在当前路径下生成.clang-format文件。

clang-format -style=LLVM -dump-config > .clang-format

clang-format内部原生支持五种格式:

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit

我们可以在vscode中输入快捷点ctrl+shift+p打开设置面板(或者按下ctrl+, ),之后在输入框输入clang-format,找到style选项

可以看到这里的文件格式是file,其表示按照我们自己定义的.clang-format文件格式来,接下来我们修改生产的.clang-format件,以下是笔者找到了几篇关于google的编码风格,可参考

---
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
 
BasedOnStyle:   LLVM
Language:        Cpp
 
# this style configuration is based on google style configuration.
# The following configuration is different from the basic configuration.
 
# 缩进宽度
IndentWidth:     4
 
# 访问权限说明符(public/private等)的偏移
AccessModifierOffset: -4
 
# # 开括号(开圆括号、尖括号、方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
# AlignAfterOpenBracket: Align
 
# # 连续赋值时,对齐所有等号
# AlignConsecutiveAssignments: false
 
# # 连续声明时,对齐所有声明的变量名
# AlignConsecutiveDeclarations: false
 
# 反斜杆换行的对齐方式
# -- DontAlign - 不进行对齐
# -- Left - 反斜杠靠左对齐
# -- Right - 反斜杠靠右对齐
# AlignEscapedNewlines: Right
 
# 二元、三元表达式的对齐方式(当表达式需要占用多行时)
# -- DontAlign - 不进行对齐
# -- Align - 从操作符开始对齐
# -- AlignAfterOperator - 从操作数开始对齐
AlignOperands:   true
 
# # 是否对齐行尾注释
# AlignTrailingComments: true
 
# # 函数声明的所有参数在放在下一行
# AllowAllParametersOfDeclarationOnNextLine: false
 
# # 是否允许短的代码块放在同一行
# AllowShortBlocksOnASingleLine: false
 
# # 短的case标签和语句放在同一行
# AllowShortCaseLabelsOnASingleLine: true
 
# # 短的函数放在同一行
# -- None - 不把短的函数放在同一行
# -- InlineOnly - 只把类内的内联函数放在同一行,全局的空函数不放在同一行
# -- Empty - 只把空的函数放在同一行
# -- Inline - 把类内的内联函数放在同一行,全局的空函数不放在同一行
# -- All - 都允许放在同一行
AllowShortFunctionsOnASingleLine: InlineOnly
 
# # 短的if语句保持在同一行
# AllowShortIfStatementsOnASingleLine: true
 
# # 短的循环保持在同一行
# AllowShortLoopsOnASingleLine: true
 
# # 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数), 
# # AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)
# AlwaysBreakAfterReturnType: None
 
# # 总是在多行string字面量前换行
# AlwaysBreakBeforeMultilineStrings: true
 
# # 总是在template声明后换行
AlwaysBreakTemplateDeclarations: true
 
# # 函数调用时,参数的放置规则
# -- false - 参数要么放在同一行,要么每个参数占用一行
# -- true - 不做强制要求
# BinPackArguments: true
 
# 函数声明、定义时,参数的放置规则
# -- false - 参数要么放在同一行,要么每个参数占用一行
# -- true - 不做强制要求
# BinPackParameters: true
 
# 大括号放置风格
# -- Attach - 大括号紧随前方内容,放在同一行
# -- Linux - 与 Attach 类似,除了 函数、命名空间、类定义 的大括号放在下一行
# -- Mozilla - 与 Attach 类似,除了枚举、函数、结构(class\struct\union)的大括号放在下一行
# -- Stroustrup - 与 Attach 类似,但函数定义前、catch前方、else前方的"{}"放在单独一行
# -- Allman - 总是换行
# -- Whitesmiths - 类似 Allman,但"{}"和内部的语句对齐到同样位置
# -- GNU - 总是换行,但在控制语句后的"{}"总是对齐到下一个位置
# -- WebKit - 与 Attach 类似,但在函数定义前换行 
# -- Custom - 依赖 BraceWrapping
#   注:这里认为语句块也属于函数
BreakBeforeBraces: Custom
 
# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
BraceWrapping:
  # class定义后面
  AfterClass: true
  # 控制语句后面
  AfterControlStatement: false
  # enum定义后面
  AfterEnum: false
  # 函数定义后面
  AfterFunction: true
  # 命名空间定义后面
  AfterNamespace: true
  # ObjC定义后面
  AfterObjCDeclaration: false
  # struct定义后面
  AfterStruct: false
  # union定义后面
  AfterUnion: false
  # extern之后
  AfterExternBlock: true
  # catch之前
  BeforeCatch: false
  # else之前
  BeforeElse: false
  # 继续缩进大括号
  IndentBraces: false
  # 分离空函数
  # # 当空白函数的"{}"和函数名称不需要放在同一行时,是否拆分函数体
  SplitEmptyFunction: true
  # 分离空语句
  # # 当空白结构(class\struct\union)的"{}"需要放在单独的行时,是否拆分"{}"
  SplitEmptyRecord: true
  # 分离空命名空间
  # # 当空白的命名空间的"{}"需要放在单独的行时,是否拆分"{}"
  SplitEmptyNamespace: true
 
# # 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)
BreakBeforeBinaryOperators: NonAssignment
 
# BreakBeforeInheritanceComma: false
 
# # 在三元运算符前换行
# 当三元表达式不能放在同一行时,是否在三元操作符前方换行
# -- true - 操作符位于新行的首部
# -- false - 操作符位于上一行的尾部
BreakBeforeTernaryOperators: true
 
# BreakConstructorInitializersBeforeComma: false
 
# # 构造函数初始化列表分割方式
# -- BeforeColon - 在冒号 ':' 前方分割,冒号位于行首,逗号','位于行尾
# -- BeforeComma - 在冒号和逗号前方分割,冒号和逗号都位于行首,并且对齐 
# -- AfterColon - 在冒号和逗号后方分割,冒号和逗号位于行尾
BreakConstructorInitializers: BeforeColon
 
# # 是否在每个java注解后方换行
# BreakAfterJavaFieldAnnotations: false
 
# # 是否分割过长的字符串
# BreakStringLiterals: false
 
# # 每行字符长度的限制,0表示没有限制
ColumnLimit:     100
 
# # 用于匹配注释信息的正则表达式,被匹配的行不会做任何修改
# CommentPragmas:  '^ IWYU pragma:'
# 是否压缩紧接的命名空间
# -- true - 将紧跟的命名空间放在同一行
# -- false - 每个命名空间位于新的一行
CompactNamespaces: false
 
# # 构造函数的初始化列表要么都在同一行,要么都各自一行
# -- true - 如果可能,初始化列表放在同一行;如果不满足长度选择,则每个单独放一行
# -- false - 初始化列表可以随意放置
# ConstructorInitializerAllOnOneLineOrOnePerLine: false
 
# # 构造函数的初始化列表和基类集成列表的对齐宽度
ConstructorInitializerIndentWidth: 4
 
# # 延续语句的对齐宽度
ContinuationIndentWidth: 4
 
# # 去除C++11的列表初始化的大括号{后和}前的空格
Cpp11BracedListStyle: true
 
# 是否自动分析指针的对齐方式
# -- true - 自动分析并使用指针的对齐方式,若无法分析,则使用 PointerAlignment
# -- false - 不自动分析
# DerivePointerAlignment: true
 
# 是否禁用格式化
DisableFormat:   false
# ExperimentalAutoDetectBinPacking: false
 
# 是否自动修正命名空间的结束注释
# -- true - 在短的命名空间尾部,自动添加或修改错误的命名空间结束注释
# -- false - 不自动修正
FixNamespaceComments: true
 
# foreach 循环
ForEachMacros:
  - foreach
  - Q_FOREACH
  - BOOST_FOREACH
 
# 多个 include 块(有空行分隔的include)排序时的分组规则
# -- Preserve - 保留原有的块分隔,各自排序
# -- Merge - 将所有的块视为同一个,然后进行排序
# -- Regroup - 将所有的块视为同一个进行排序,然后按照 IncludeCategories 的规则进行分组
IncludeBlocks:   Preserve
 
# IncludeCategories: 
#   - Regex:           '^<ext/.*\.h>'
#     Priority:        2
#   - Regex:           '^<.*\.h>'
#     Priority:        1
#   - Regex:           '^<.*'
#     Priority:        2
#   - Regex:           '.*'
#     Priority:        3
# IncludeIsMainRegex: '([-_](test|unittest))?$'
 
# # 缩进case标签
# -- true - case 不与 switch 对齐
# -- false - case 和 switch 对齐
IndentCaseLabels: true
 
# 预处理命令(#if\#ifdef\#endif等)的缩进规则
# -- None - 不进行缩进
# -- AfterHash - 在前导'#'后缩进,'#'放在最左侧,之后的语句参与缩进
# -- BeforeHash - 在前导'#'前进行缩进
IndentPPDirectives: AfterHash
 
# # 函数返回类型换行时,缩进函数声明或函数定义的函数名
# IndentWrappedFunctionNames: false
 
# JavaScript 中的字符串引号规则
# -- Leave - 保持原样
# -- Single - 全部使用单引号
# -- Double - 全部使用双引号 
JavaScriptQuotes: Leave
 
# 是否在 JavaScript 的 import/export 语句后换行
# JavaScriptWrapImports: true
 
# # 保留在块开始处的空行
# -- true - 保留块起始的空行
# -- false - 删除块起始的空行
KeepEmptyLinesAtTheStartOfBlocks: true
 
# 用于识别宏定义型块起始的正则表达式
# MacroBlockBegin: ''
 
# 用于识别宏定义型块结束的正则表达式
# MacroBlockEnd:   ''
 
# # 连续空行的最大数量
MaxEmptyLinesToKeep: 1
 
# # 命名空间内部的缩进规则
# -- None - 都不缩进
# -- Inner - 只缩进嵌套的命名空间内容
# -- All - 缩进所有命名空间内容
NamespaceIndentation: Inner
 
# Objective-C 相关配置
# ObjCBlockIndentWidth: 2
# ObjCSpaceAfterProperty: false
# ObjCSpaceBeforeProtocolList: false
# PenaltyBreakAssignment: 2
# PenaltyBreakBeforeFirstCallParameter: 1
# PenaltyBreakComment: 300
# PenaltyBreakFirstLessLess: 120
# PenaltyBreakString: 1000
# PenaltyExcessCharacter: 1000000
# PenaltyReturnTypeOnItsOwnLine: 200
 
# # 指针和引用(*和&)的对齐规则
# -- Left - * 靠近左侧
# -- Right - * 靠近右侧
# -- Middle - * 放在中间
# NOTE : 在 SpaceAroundPointerQualifiers 为 Default,
# 	 且 DerivePointerAlignment 失效后启用
PointerAlignment: Right
 
# RawStringFormats: 
#   - Delimiter:       pb
#     Language:        TextProto
#     BasedOnStyle:    google
 
# # 重新排版注释
ReflowComments:  false
 
# # 重新排序#include
# -- Never - 不进行排序
# -- CaseSensitive - 排序时大小写敏感
# -- CaseInsensitive - 排序时大小写不敏感
SortIncludes:    false
 
# java 中静态 import 的排序规则
# -- Before - 静态放在非静态前方
# -- After - 静态放在非静态后方
# SortJavaStaticImport: Before
 
# # 重新排序using声明
SortUsingDeclarations: false
 
# # 在C风格类型转换后添加空格
SpaceAfterCStyleCast: false
 
# # 在Template关键字后面添加空格
SpaceAfterTemplateKeyword: true
 
# # 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
 
# # 在 C++11 的初始化列表前加空格
# SpaceBeforeCpp11BracedList: true
 
# 在构造函数的初始化冒号":"前加空格
# SpaceBeforeCtorInitializerColon: true
 
# 在构造函数的继承冒号":"前加空格
# SpaceBeforeInheritanceColon: true
 
# 小括号"()"前加空格的规则
# -- Never - 从不加空格
# -- ControlStatements - 只在控制语句(for/if/while...)时加空格
# -- ControlStatementsExceptForEachMacros - 类型 ControlStatements,只是不再 ForEach 后加空格
# -- Always - 总是添加空格
# -- NonEmptyParentheses - 类似 Always,只是不再空白括号前加空格  
SpaceBeforeParens: ControlStatements
 
# 在 for 循环的冒号":"前加空格
# SpaceBeforeRangeBasedForLoopColon: true
 
# # 在空白的小括号"()"中添加空格
SpaceInEmptyParentheses: false
 
# # 在行尾的注释前添加的空格数(只适用于//)
SpacesBeforeTrailingComments: 1
 
# # 在尖括号的"<"后,和">"前添加空格
SpacesInAngles:  false
 
# # 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
SpacesInContainerLiterals: true
 
# # 在C风格类型转换的括号中添加空格
SpacesInCStyleCastParentheses: false
 
# # 在圆括号的"("后,和")"前添加空格
SpacesInParentheses: false
 
# 在中括号中加空格
# 当中括号内没有数据时,不受本规则影响(如空白的lambda 捕获表、不定长度的数组声明)
SpacesInSquareBrackets: false
 
# 语言标准: Cpp03, Cpp11, Auto
Standard: Auto
 
# # tab宽度
TabWidth: 4
 
# # 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
UseTab: Never
---
---
Language:        Cpp
# BasedOnStyle:  LLVM
AccessModifierOffset: -3
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands:   true
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: true
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
  AfterCaseLabel:  false
  AfterClass:      false
  AfterControlStatement: false
  AfterEnum:       false
  AfterFunction:   false
  AfterNamespace:  false
  AfterObjCDeclaration: false
  AfterStruct:     false
  AfterUnion:      false
  AfterExternBlock: false
  BeforeCatch:     false
  BeforeElse:      false
  IndentBraces:    false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
  SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit:     80
CommentPragmas:  '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat:   false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
  - foreach
  - Q_FOREACH
  - BOOST_FOREACH
IncludeBlocks:   Preserve
IncludeCategories:
  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
    Priority:        2
    SortPriority:    0
  - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
    Priority:        3
    SortPriority:    0
  - Regex:           '.*'
    Priority:        1
    SortPriority:    0
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentCaseLabels: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentWidth:     4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd:   ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments:  true
SortIncludes:    true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles:  false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
Standard:        Latest
StatementMacros:
  - Q_UNUSED
  - QT_REQUIRE_VERSION
TabWidth:        8
UseCRLF:         false
UseTab:          Never
...
 

之后在想要格式化的文件中使用快捷键ctrl+shift+i就可以了格式化文档了 

参考

clang-format安装配置与vscode支持_yum install clang-format-CSDN博客

vscode安装配置clang-format插件及使用_vscode clang format-CSDN博客


http://www.kler.cn/a/575971.html

相关文章:

  • VAE中的负对数似然损失与自适应容忍度
  • Windows编程----进程:命令行参数
  • WebRTC简介
  • NotePad++ 安装Jsonviewer
  • [密码学实战]Java实现TLS 1.2双向认证
  • Mybatis集合嵌套查询,三级嵌套
  • URL中的特殊字符与web安全
  • 深度学习算法实战——情感语音合成(主页有源码)
  • DeepSeek + ReAct 实现 Agent
  • 20250307-vue组件基础1
  • Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)
  • SDK编程,MFC编程,WTL编程之间的关系
  • 146.LRU缓存
  • (二十三)Java-synchronized
  • 基于Docker去创建MySQL的主从架构
  • DeepSeek × 豆包深度整合指南:工作流全解析
  • vue管理布局左侧菜单栏NavMenu
  • 蓝桥备赛(11)- 数据结构、算法与STL
  • 在 MySQL 的默认事务隔离级别(可重复读,REPEAT READ)下,事务 A 和事务 B 对同一行数据的操作时会产生什么呢?
  • “此电脑”中删除WPS云盘方法(百度网盘通用)