vscode设置C++代码格式化(Clang-Format)

2023-05-16

  • vscode中只要安装了C/C++扩展后,在C/C++源文件中右键就能看到格式化文档的选项,这样就能通过该选项或者其快捷键(Shift+Alt+F)来实现快速格式化代码。
  • 安装了C/C++扩展同时会自动安装clang-format,通过配置.clang-format文件可以对代码格式化进行一些自己的设置。这样就可以按照自己的设置来进行一键格式化了。
  • 在vscode首选项中有一些相关设置。
    • C_Cpp: Clang_format_style 决定格式化形式,若为file,则调用在workspace中的.clang-format
    • C_Cpp: Clang_format_fallback Style ,若上一个选项设置为file,但无.clang-format文件则按照此处规则
  • 我是通过vscode的remote ssh远程登录到linux虚拟机上,我虚拟机中的clang-format在/root/.vscode-server/extensions/ms-vscode.cpptools-1.8.4/LLVM/bin文件夹中,所以cd到该目录下执行命令——./clang-format -style=LLVM -dump-config > .clang-format就能生成.clang-format文件。将该文件拷贝到自己项目中,然后按照自己的需求修改配置就可以了。
  • 其中.clang-format文件生成命令的格式是:
// 格式名可选:LLVM, Google, Chromium, Mozilla, WebKit。
clang-format -style=格式名 -dump-config > .clang-format
  • 以下是我自定义的格式化配置,仅供参考。
---
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language:        Cpp
# BasedOnStyle:  LLVM
# 访问说明符(public、private等)的偏移
AccessModifierOffset: -4
# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
AlignAfterOpenBracket: Align
# 对齐数组列
AlignArrayOfStructures: None
# 对齐连续宏定义
AlignConsecutiveMacros: None
# 连续赋值时,对齐所有等号
AlignConsecutiveAssignments: None
# 对齐连续位字段
AlignConsecutiveBitFields: None
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations: None
# 左对齐逃脱换行(使用反斜杠换行)的反斜杠
AlignEscapedNewlines: Left
# 水平对齐二元和三元表达式的操作数
AlignOperands:   Align
# 对齐连续的尾随的注释
AlignTrailingComments: true
# 允许函数声明的所有参数在放在下一行
AllowAllParametersOfDeclarationOnNextLine: true
# 允许短的枚举放在同一行
AllowShortEnumsOnASingleLine: true
# 允许短的块放在同一行
AllowShortBlocksOnASingleLine: Never
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允许短的函数放在同一行
AllowShortFunctionsOnASingleLine: All
# 允许短的匿名函数放在同一行
AllowShortLambdasOnASingleLine: All
# 允许短的if语句保持在同一行
AllowShortIfStatementsOnASingleLine: Never
# 允许短的循环保持在同一行
AllowShortLoopsOnASingleLine: false
# 总是在返回类型后换行
AlwaysBreakAfterReturnType: None
# 总是在多行string字面量前换行
AlwaysBreakBeforeMultilineStrings: false
# 总是在template声明后换行
AlwaysBreakTemplateDeclarations: MultiLine
AttributeMacros:
  - __capability
# false表示函数实参要么都在同一行,要么都各自一行
BinPackArguments: true
# false表示所有形参要么都在同一行,要么都各自一行
BinPackParameters: true
# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
BraceWrapping:
  AfterCaseLabel:  false
  AfterClass:      false
  AfterControlStatement: Never
  AfterEnum:       false
  AfterFunction:   false
  AfterNamespace:  false
  AfterObjCDeclaration: false
  AfterStruct:     false
  AfterUnion:      false
  AfterExternBlock: false
  BeforeCatch:     false
  BeforeElse:      false
  BeforeLambdaBody: false
  BeforeWhile:     false
  IndentBraces:    false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
  SplitEmptyNamespace: true
# 在二元运算符前换行
BreakBeforeBinaryOperators: None
# 在concept前换行
BreakBeforeConceptDeclarations: true
# 在大括号前换行: Attach(始终将大括号附加到周围的上下文)
BreakBeforeBraces: Attach
# 继承列表样式
BreakInheritanceList: AfterComma
# 在三元运算符前换行
BreakBeforeTernaryOperators: true
# 构造函数初始值设定项换行样式
BreakConstructorInitializers: BeforeComma
# 在java字段的注释后换行
BreakAfterJavaFieldAnnotations: false
# 每行字符的限制,0表示没有限制
ColumnLimit:     80
# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
CommentPragmas:  '^ IWYU pragma:'
# 在新行上声明每个命名空间
CompactNamespaces: false
# 构造函数的初始化列表的缩进宽度
ConstructorInitializerIndentWidth: 4
# 延续的行的缩进宽度
ContinuationIndentWidth: 4
# 去除C++11的列表初始化的大括号{后和}前的空格
Cpp11BracedListStyle: true
# 继承最常用的换行方式
DeriveLineEnding: true
# 继承最常用的指针和引用的对齐方式
DerivePointerAlignment: false
# 关闭格式化
DisableFormat:   false
# 删除访问修饰符后的所有空行
EmptyLineAfterAccessModifier: Never
# 仅当访问修饰符开始一个新的逻辑块时才添加空行
EmptyLineBeforeAccessModifier: LogicalBlock
# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)
ExperimentalAutoDetectBinPacking: false
# 自动补充namespace注释
FixNamespaceComments: true
# 需要被解读为foreach循环而不是函数调用的宏
ForEachMacros:
  - foreach
  - Q_FOREACH
  - BOOST_FOREACH
IfMacros:
  - KJ_IF_MAYBE
# 多个#include块合并在一起并排序为一个
IncludeBlocks:   Merge
# 可以定义负数优先级从而保证某些#include永远在最前面
IncludeCategories:
  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
    Priority:        2
    SortPriority:    0
    CaseSensitive:   false
  - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
    Priority:        3
    SortPriority:    0
    CaseSensitive:   false
  - Regex:           '.*'
    Priority:        1
    SortPriority:    0
    CaseSensitive:   false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
# 缩进访问修饰符
IndentAccessModifiers: false
# 缩进case标签
IndentCaseLabels: false
# case 标签后面的块使用与 case 标签相同的缩进级别
IndentCaseBlocks: false
# 缩进goto标签。
IndentGotoLabels: false
# 缩进预处理器指令
IndentPPDirectives: None
# 向后兼容缩进外部块
IndentExternBlock: AfterExternBlock
# 缩进模板中的requires子句
IndentRequires:  false
# 缩进宽度
IndentWidth:     4
# 函数返回类型换行时,缩进函数声明或函数定义的函数名
IndentWrappedFunctionNames: false
# 插入尾随逗号
InsertTrailingCommas: None
# 保留JavaScript字符串引号
JavaScriptQuotes: Leave
# 包装 JavaScript 导入/导出语句
JavaScriptWrapImports: true
# 保留在块开始处的空行
KeepEmptyLinesAtTheStartOfBlocks: true
# 相对于 lambda 签名对齐 lambda 主体
LambdaBodyIndentation: Signature
# 开始一个块的宏的正则表达式
MacroBlockBegin: ''
# 结束一个块的宏的正则表达式
MacroBlockEnd:   ''
# 连续空行的最大数量
MaxEmptyLinesToKeep: 1
# 命名空间的缩进
NamespaceIndentation: Inner
ObjCBinPackProtocolList: Auto
# 使用ObjC块时缩进宽度
ObjCBlockIndentWidth: 4
ObjCBreakBeforeNestedBlockParam: true
# 在ObjC的@property后添加一个空格
ObjCSpaceAfterProperty: false
# 在ObjC的protocol列表前添加一个空格
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PenaltyIndentedWhitespace: 0
# 指针的对齐: Left, Right, Middle
PointerAlignment: Left
# 缩进预处理器语句的列数
PPIndentWidth:   -1
# 引用的对齐
ReferenceAlignment: Pointer
# 允许重新排版注释
ReflowComments:  true
# 短命名空间跨越的最大展开行数
ShortNamespaceLines: 1
# 允许排序#include
SortIncludes:    CaseSensitive
# java静态导入放在非静态导入之前
SortJavaStaticImport: Before
# 对using声明排序
SortUsingDeclarations: true
# 在C风格类型转换后添加空格
SpaceAfterCStyleCast: false
# 在!后添加空格
SpaceAfterLogicalNot: false
# 在Template关键字后添加空格
SpaceAfterTemplateKeyword: true
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 不在case冒号之前添加空格
SpaceBeforeCaseColon: false
# 不在C++11大括号列表之前添加空格
SpaceBeforeCpp11BracedList: false
# 在构造函数初始化器冒号之前添加空格
SpaceBeforeCtorInitializerColon: true
# 在继承冒号前添加空格
SpaceBeforeInheritanceColon: true
# 开圆括号之前添加一个空格: Never, ControlStatements, Always
SpaceBeforeParens: ControlStatements
# 不要确保指针限定符周围有空格,而是使用 PointerAlignment
SpaceAroundPointerQualifiers: Default
# 在基于范围的for循环冒号之前添加空格
SpaceBeforeRangeBasedForLoopColon: true
# {}中间不添加空格
SpaceInEmptyBlock: false
# 在空的圆括号中添加空格
SpaceInEmptyParentheses: false
# 在尾随的评论前添加的空格数(只适用于//)
SpacesBeforeTrailingComments: 1
# 在尖括号的<后和>前添加空格
SpacesInAngles:  Never
# 不在if/for/switch/while条件周围插入空格
SpacesInConditionalStatement: false
# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
SpacesInContainerLiterals: true
# 在C风格类型转换的括号中添加空格
SpacesInCStyleCastParentheses: false
# 行注释开头允许有多少个空格。要禁用最大值,请将其设置为-1,除此之外,最大值优先于最小值
SpacesInLineCommentPrefix:
  Minimum:         1
  Maximum:         -1
# 在圆括号的(后和)前添加空格
SpacesInParentheses: false
# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响
SpacesInSquareBrackets: false
# 不在[前添加空格
SpaceBeforeSquareBrackets: false
# 位域:每边都添加空格
BitFieldColonSpacing: Both
# 标准
Standard:        Auto
# 在语句前面被忽略的宏定义,就好像它们是一个属性一样
StatementAttributeLikeMacros:
  - Q_EMIT
# 应该被解释为完整语句的宏定义
StatementMacros:
  - Q_UNUSED
  - QT_REQUIRE_VERSION
# tab宽度
TabWidth:        4
# 使用\n换行
UseCRLF:         false
# 使用tab字符:ForIndentation——仅将制表符用于缩进
UseTab:          ForIndentation
# 对空格敏感的宏定义
WhitespaceSensitiveMacros:
  - STRINGIZE
  - PP_STRINGIZE
  - BOOST_PP_STRINGIZE
  - NS_SWIFT_NAME
  - CF_SWIFT_NAME
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vscode设置C++代码格式化(Clang-Format) 的相关文章

随机推荐

  • VSLAM:一:VSLAM小科普

    一 目的 1 想知道 xff1a VSLAM小科普 1 将其转载 xff0c 避免作者删除 xff0c 就没有了 二 参考 1 VSLAM小科普 https zhuanlan zhihu com p 121601875 百度百科 三 注意
  • Unity3D:问题(成功):如何解决:Unity2019新建工程都空白红色感叹号报错

    目录 一 目的 1 如何解决 Unity2019新建工程都空白红色感叹号报错 2 Unity2019好几个版本新建工程都有红色感叹号空白报错 xff0c Unity卸载安装 UnityHUB卸载安装都试过 xff0c 许可证个人的 xff0
  • Unity用UGUI实现省份选择

    参考 Unity3D中使用UGUI实现省市选择器 YOLO TO GAME的博客 CSDN博客
  • Unity3D中Resources动态加载图片

    问题 xff1a unity的Resources动态加载就不必多说了 xff0c 这里出现的问题是当我把图片放入Resources文件夹后 xff0c 使用Resources Load xff08 datapath xff09 却并没有出现
  • Navicat报错:1045-Access denied for user root@localhost(using password:YES)

    解决 xff1a Navicat报错 xff1a 1045 Access denied for user root 64 localhost using password YES SET PASSWORD FOR 39 root 39 64
  • UE4添加音乐、音效

    目录 一 目的 xff1a 1 想 xff1a UE4添加音乐 音效 二 参考 1 三 操作 xff1a 完成 1 前述 xff1a 1 导入音乐 1 创建Cue 1 Cue进行设置 1 创建音乐 1 播放和暂停音乐 一 目的 xff1a
  • 《嵌入式C语言自我修养》书评

    首先 xff0c 介绍本书的内容 笔者从嵌入式工程师的视角出发 xff0c 先为我们初学者补上硬件相关基础 xff0c 如计算机工作原理和系统结构 xff08 理解程序编译 链接 安装和运行机制 xff09 CPU的工作原理 xff08 理
  • SLAM14讲之第五讲--像素坐标系、畸变、双目相机深度求解

    像素坐标系 由相似三角形的定义可得 xff1a 这是相对于成像平面的坐标变化 xff0c 我们实际上所得到的图片还要经历一层成像平面到像素平面的变换 xff0c 实际上就是相差了一个缩放和原点的平移 如此我们定义 xff1a u为横轴向右与
  • python webkit 异步抓取页面数据

    usr bin python from ghost import Ghost class FetcherCartoon def getCartoonUrl self url if url is None return false todo
  • 树莓派 Ubuntu mate 16.04使用VNC开启远程桌面

    1 安装 vncserver sudo apt span class token operator span get span class token operator span y install vnc4server 2 启动 vncs
  • 数学建模(四)-----最优化问题-----Simulate Anneal Arithmetic

    模拟退火算法的应用很广泛 xff0c 可以较高的效率求解最大截问题 Max Cut Problem 0 1背包问题 Zero One Knapsack Problem 图着色问题 Graph Colouring Problem 调度问题 S
  • 路径规划的优化

    因为这个求N个点的最短路径是将把所有可能的走法都可能尝试一遍 这样的话 如果计算十几个点之间的最短路径是没有问题的 但是问题就在如果超过二十个点位 那么最坏的情况就是需要计算20的阶乘个 这个计算是相当高的 可能会把线上的服务器打爆 或者计
  • SPL06电容式压力传感器数据读取与处理(基于STM32)

    该例程使用的开发板为正点原子的精英板F103 xff0c 相关资料请大家自行去正点原子论坛下载 首先来看一下SPL06的简介 xff0c SPL06的压强测量范围30kPa 110kPa xff0c 最大供电电压为3 6V xff0c 相对
  • 企业微信开发实战(六、自建应用-审批流程引擎之配置可信任域名、创建审批模版、发起审批)

    文章目录 4 自建应用审批状态变化通知回调4 1概述4 2代码实战 5 查询自建应用审批单当前状态5 1概述5 2代码实战 源码赞赏 4 自建应用审批状态变化通知回调 4 1概述 1 企业可以在管理后台 自建应用 设置API接收中 xff0
  • FreeRTOS内存管理之heap_4.c

    FreeRTOS内存管理之heap 4 c源码解析 每当创建任务 队列 互斥量 软件定时器 信号量或事件组时 xff0c RTOS内核会为它们分配RAM 标准函数库中的malloc 和free 函数有些时候能够用于完成这个任务 xff0c
  • git图形化管理工具

    一 独立客户端工具 1 GitHub for Desktop 全球开发人员交友俱乐部提供的强大工具 xff0c 功能完善 xff0c 使用方便 对于使用GitHub的开发人员来说是非常便捷的工具 界面干净 xff0c 用起来非常顺手 xff
  • ROS功能包

    ROS package介绍 package是什么呢 xff1f 指的是一种特定的文件结构和文件夹组合 通常将实现同一个具体功能的程序代码放到一个package中 xff0c 比如实现相机数据采集这一功能 文件结构 CMakeLists tx
  • 坐标转换tf

    tf介绍 坐标转换 TransForm 位置和姿态 坐标变换是空间实体的位置描述 xff0c 是从一种坐标系统变换到另一种坐标系统的过程 通过建立两个坐标系统之间一一对应关系来实现下图为机器人几个部件之间的坐标关系 tf概念 tf是一个用户
  • 经典Windows编程书单

    说好的这次写一个图形编程书单 但是看起来不是很好整理 xff0c 这类书散落的家里到处都是 先把经典Windows编程的书整理一下吧 xff0c 不过Windows的也到处都是很多都找不到了 xff0c 只能把找到的拍个照 xff0c 可能
  • vscode设置C++代码格式化(Clang-Format)

    vscode中只要安装了C C 43 43 扩展后 xff0c 在C C 43 43 源文件中右键就能看到格式化文档的选项 xff0c 这样就能通过该选项或者其快捷键 xff08 Shift 43 Alt 43 F xff09 来实现快速格