前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++代码风格和clang-format配置

C++代码风格和clang-format配置

原创
作者头像
mariolu
修改2021-10-02 20:10:33
4.1K0
修改2021-10-02 20:10:33
举报

C++是Google大部分开源项目的主要编程语言。C++有很多强大特性,但是另一面就是他的复杂性更容易产生bug,难以阅读和维护。

一、常用设置

这里针对项目组常用的习惯。把谷歌代码风格稍微修改了下:

  • 每行最大长度由80列扩张到160列
  • public/private/protected不需要缩进一个空格

对应的clang-format配置为AccessModifierOffset:访问修饰符的额外缩进或缩进,例如public:.

二、对齐配置

这里把所有的对齐配置选项都罗列出来:

2.1 AlignAfterOpenBracket(BracketAlignmentStyle)

如果true,在左括号后水平对齐参数。

括号包括圆括号(圆括号)、尖括号和方括号。

这里配置的值为:

  • BAS_Align(在配置中Align:)对齐开括号上的参数,例如: someLongFunction(argument1,

2.2 AlignConsecutiveMacros(AlignConsecutiveStyle)

对齐连续宏定义的样式。

配置为Consecutive 格式将输出如下:

代码语言:javascript
复制
#define SHORT_NAME       42
#define LONGER_NAME      0x007f
#define EVEN_LONGER_NAME (2)
#define foo(x)           (x * x)
#define bar(y, z)        (y + z)

2.3 AlignEscapedNewlines(EscapedNewlineAlignmentStyle)

用于在转义换行符中对齐反斜杠的选项。

代码语言:javascript
复制
ENAS_Left(在配置中Left:)尽可能向左对齐转义换行符。
true:
#define A   \
  int aaaa; \
  int b;    \
  int dddddddddd;

false:

2.4 操作符对齐AlignOperands (bool)

如果为 true,则水平对齐二元和三元表达式的操作数。

具体来说,这会对齐需要拆分为多行的单个表达式的操作数。

设置为ture:

代码语言:javascript
复制
void func() {
  return some_func(some_variables)
         << "aaaaaaaaaaaaaaasssssssssssssssaaaaaaaaaaaaaaaaaa"
         << "asdaaasssssssss";
}

设置为false:

代码语言:javascript
复制
void func() {
    return some_func(some_variables)
        << "aaaaaaaaaaaaaaasssssssssssssssaaaaaaaaaaaaaaaaaa"
        << "asdaaasssssssss";
}

2.5 对齐注释AlignTrailingComments(Boolean)

如果true,对齐尾随注释。

代码语言:javascript
复制
true:                                   false:
int a;     // My comment a      vs.     int a; // My comment a
int b = 2; // comment  b                int b = 2; // comment about b

2.6 函数初始化列表对齐 AllowAllConstructorInitializersOnNextLine

如果函数调用或花括号初始化器列表不适合一行,则允许将所有参数放到下一行,即使 BinPackArgumentsfalse

2.7 函数声明对齐 AllowAllParametersOfDeclarationOnNextLine(Boolean)

如果函数声明不适合一行,则允许将函数声明的所有参数放到下一行,即使BinPackParametersfalse

三、是否写成单行配置

3.1 AllowShortBlocksOnASingleLine(ShortBlockStyle)

根据值,可以放在一行中。while (true) { continue; }

3.2 AllowShortCaseLabelsOnASingleLine(Boolean)

如果true,短大小写标签将被压缩为一行

3.3 AllowShortFunctionsOnASingleLine(ShortFunctionStyle)

根据值,可以放在一行中。int f() { return 0; }

3.4 AllowShortLambdasOnASingleLine(ShortLambdaStyle)

根据值,可以放在一行中。auto lambda []() { return 0; }

3.5 AllowShortIfStatementsOnASingleLine(ShortIfStyle)

根据值,可以放在一行中。if (a) return;

3.6 AllowShortLoopsOnASingleLine(Boolean)

如果true,可以放在一行。while(true)continue;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、常用设置
  • 二、对齐配置
    • 2.1 AlignAfterOpenBracket(BracketAlignmentStyle)
      • 2.2 AlignConsecutiveMacros(AlignConsecutiveStyle)
        • 2.3 AlignEscapedNewlines(EscapedNewlineAlignmentStyle)
          • 2.4 操作符对齐AlignOperands (bool)
            • 2.5 对齐注释AlignTrailingComments(Boolean)
              • 2.6 函数初始化列表对齐 AllowAllConstructorInitializersOnNextLine
              • 三、是否写成单行配置
                • 3.1 AllowShortBlocksOnASingleLine(ShortBlockStyle)
                  • 3.2 AllowShortCaseLabelsOnASingleLine(Boolean)
                    • 3.3 AllowShortFunctionsOnASingleLine(ShortFunctionStyle)
                      • 3.4 AllowShortLambdasOnASingleLine(ShortLambdaStyle)
                        • 3.5 AllowShortIfStatementsOnASingleLine(ShortIfStyle)
                          • 3.6 AllowShortLoopsOnASingleLine(Boolean)
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档