专栏首页程序手艺人团队效率工具: 代码格式化之Clang-format

团队效率工具: 代码格式化之Clang-format

介绍

平时团队进行合作的时候需要注意代码的格式,虽然很难统一每个人的编码风格,但是通过工具能够很好的管理代码格式。这里介绍下clang-format,它是基于clang的一个命令行工具,能够自动化格式C/C++/Obj-C代码,支持多种代码风格:Google, Chromium, LLVM, Mozilla, WebKit,也支持自定义风格(通过编写.clang-format文件)很方便的同意代码格式。

使用方法

  • Linux下下安装Clang-format : sudo apt-get install clang-format
  • 以LLVM代码风格格式化main.cpp, 结果直接写到main.cpp clang g-format -i main.cpp -style=LLVM
  • 当然也支持对指定行格式化,格式化main.cpp的第1,2行 clang-format -lines=1:2 main.cpp
  • vim 中也可以集成该插件1
  • 它提供一个clang-format-diff.py脚本,用来格式化patch,code review提交代码2

配置文件说明

  • 配置文件.clang-format详细说明
# 基于那个配置文件
BasedOnStyle: LLVM
# 访问说明符的偏移(public private)
AccessModifierOffset: -4
# 括号之后,水平对齐参数: Align DontAlign AlwaysBreak
AlignAfterOpenBracket: Align
# 连续的赋值时,对齐所有的等号
AlignConsecutiveAssignments: true
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations: true
# 左对齐换行(使用反斜杠换行)的反斜杠 
AlignEscapedNewlinesLeft: true
# 水平对齐二元和三元表达式的操作数 
AlignOperands: true
# 对齐连续的尾随的注释  
AlignTrailingComments: true
# 允许函数声明的所有参数在放在下一行  
AllowAllParametersOfDeclarationOnNextLine: true
# 允许短的块放在同一行  
AllowShortBlocksOnASingleLine : false
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All 
AllowShortFunctionsOnASingleLine: Empty
# 是否允许短if单行 If true, if (a) return; 可以放到同一行
AllowShortIfStatementsOnASingleLine: false
# 允许短的循环保持在同一行   
AllowShortLoopsOnASingleLine: false 
# 总是在定义返回类型后换行(deprecated)   
AlwaysBreakAfterDefinitionReturnType: None
# 每行字符的限制,0表示没有限制  
ColumnLimit: 100
# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
CommentPragmas: '^ IWYU pragma:'
# 语言: None Cpp Java Objc Protp
Language: Cpp 
#指针的*的挨着哪边
PointerAlignment: Right
#缩进宽度
IndentWidth: 4
# 连续的空行保留几行
MaxEmptyLinesToKeep: 1
# 在 @property 后面添加空格, \@property (readonly) 而不是 \@property(readonly).
ObjCSpaceAfterProperty: true
# OC block后面的缩进
ObjCBlockIndentWidth: 4
# 是否允许短方法单行
AllowShortFunctionsOnASingleLine: false
# 换行的时候对齐操作符
#AlignOperands: true
# 中括号两边空格 [] 
SpacesInSquareBrackets: true
# 小括号两边添加空格
SpacesInParentheses : false
#等号两边的空格
SpaceBeforeAssignmentOperators: true
# 容器类的空格 例如 OC的字典
SpacesInContainerLiterals: true
#缩进
IndentWrappedFunctionNames: true
#在block从空行开始
KeepEmptyLinesAtTheStartOfBlocks: true
#在构造函数初始化时按逗号断行,并以冒号对齐
BreakConstructorInitializersBeforeComma: true
#括号后添加空格
SpaceAfterCStyleCast: false
# 允许排序#include, 造成编译错误
# SortIncludes: true 
# 缩进case 标签
IndentCaseLabels: true 
#tab键盘的宽度
TabWidth: 4
UseTab: Never

参考


  1. vim代码格式化插件clang-format
  2. clang-format-diff.py

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • nghttp2 - HTTP/2 C Library 简明教程(一)

    程序手艺人
  • [ 后端篇 ] 08 - 排查后台接口崩溃问题

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z2066411585/article/details...

    程序手艺人
  • [Linux驱动炼成记] 09-串口调试

    主控(Amlogic A113X)串口和MCU(STM32) 进行串口通信,实现数据的传输,由STM32控制灯效.看似简单的一个双方对接功能,还是走了不少弯路的...

    程序手艺人
  • vscode 的settings.json

    lilugirl
  • 数字化技术赋能企业危中寻机,打造“硬核”经济

    NCP(新型冠状病毒肺炎)给2020年的起头狠狠按下的pause键,当长着獠牙的黑天鹅肆虐盘桓之际,终惊动了无辜卷入的蝴蝶,蝴蝶惊慌失措的煽动翅膀下,随之掀起社...

    数商云
  • 127个常用的JS代码片段,每段代码花30秒就能看懂(四)

    用于判断参数的值是否是对象,这里运用了Object 构造函数创建一个对象包装器,如果是对象类型,将会原值返回。

    前端达人
  • 用微软的小程序一键做 PPT,体验到底怎么样?

    还记得,在一个再普通不过的下午,躺在床上的我突发奇想,历史上的今天,有没有发生什么特殊的事情呢?

    知晓君
  • 一个执行计划异常变更的案例 - 外传之聚簇因子(Clustering Factor)

    编辑手记:一条SQL的执行计划异常变更,在深入分析的过程中,发现其涉及到的知识点非常之多,于是整个问题都变得错综复杂。前面介绍了绑定变量及其窥探方面的知识,今天...

    数据和云
  • 一入统计深似海-t检验

    生信技能树
  • 西交利物浦大学席酉民:遐想人工智能时代的高等教育

    12月23-24日,被誉为中国智能科学技术最高奖的第七届“ 吴文俊人工智能科学技术奖”颁奖盛典暨2017中国人工智能产业年会在苏州召开,鲸媒体受邀参加。西交利物...

    人工智能的秘密

扫码关注云+社区

领取腾讯云代金券