跳转至

BraceWrapping

BraceWrapping (BraceWrappingFlags)

Info

clang-format 3.8

控制大括号换行情况。

如果 BreakBeforeBraces 被设置为 BS_Custom,使用这个来指定应该如何处理每个单独的大括号。否则,这将被忽略。

# Example of usage:
BreakBeforeBraces: Custom
BraceWrapping:
  AfterEnum: true
  AfterStruct: false
  SplitEmptyFunction: false

嵌套的配置标记:

  • bool AfterCaseLabel : case 标签的括号
switch (foo) {
    case 1:
    {
        bar();
        break;
    }
    default:
    {
        plop();
    }
}
switch (foo) {
    case 1: {
        bar();
        break;
    }
    default: {
        plop();
    }
}
  • bool AfterClass : class 定义的括号
class foo {};
class foo
{};
  • BraceWrappingAfterControlStatementStyle AfterControlStatement : 包含控制语句 (if/for/while/switch/…)

可能的值:

BWACS_Never: 不要在控制语句后面用大括号括起来。

if (foo()) {
} else {
}
for (int i = 0; i < 10; ++i) {
}

BWACS_MultiLine: 在多行控制语句后只使用大括号。

if (foo && bar &&
    baz)
{
    quux();
}
while (foo || bar) {
}

BWACS_Always: 在控制语句后面总是用大括号括起来。

if (foo())
{
} else
{}
for (int i = 0; i < 10; ++i)
{}
  • bool AfterEnum : enum 定义的括号
enum X : int
{
    B
};
enum X : int { B };
  • bool AfterFunction : 函数定义的括号
void foo()
{
    bar();
    bar2();
}
void foo() {
    bar();
    bar2();
}

bool AfterNamespace : namespace 定义的括号

namespace
{
    int foo();
    int bar();
}
namespace {
    int foo();
    int bar();
}
  • bool AfterObjCDeclaration : ObjC 定义的括号 (interfaces, implementations…). @autoreleasepool@synchronized 块根据 AfterControlStatement 标志进行包装

  • bool AfterStruct : struct 定义的括号

struct foo
{
    int x;
};
struct foo {
    int x;
};
  • bool AfterUnion : union 定义的括号
union foo
{
    int x;
}
union foo {
    int x;
}
  • bool AfterExternBlock : extern 定义的括号
extern "C"
{
int foo();
}
extern "C" {
int foo();
}
  • bool BeforeCatch : catch 之前的括号
try {
    foo();
}
catch () {
}
try {
    foo();
} catch () {
}
  • bool BeforeElse : else 之前的括号
if (foo()) {
}
else {
}
if (foo()) {
} else {
}
  • bool BeforeLambdaBody : lambda 块的括号
connect(
    []()
    {
        foo();
        bar();
    });
connect([]() {
    foo();
    bar();
});
  • bool BeforeWhile : while 前的括号
do {
    foo();
}
while (1);
do {
    foo();
} while (1);
  • bool IndentBraces : 缩进包装的括号本身

  • bool SplitEmptyFunction : 如果为 false,则空函数体可以放在一行上。该选项仅在函数的左括号已经被包装的情况下使用,即设置了 AfterFunction 括号封装模式,并且该函数不可以/不应该放在单行上(如 AllowShortFunctionsOnASingleLine 和构造函数格式化选项)。

int f()
{
}
int f()
{}
  • bool SplitEmptyRecord : 如果为 false,空记录(例如类,结构体或联合)主体可以放在一行上。此选项仅在记录的开括号已经被包装时使用,即设置了 AfterClass (对于类)括号封装模式。
class Foo
{
}
class Foo
{}
  • bool SplitEmptyNamespace : 如果为 false,则空的命名空间主体可以放在一行上。该选项仅在名称空间的左大括号已经被包装时使用,即设置了 AfterNamespace 大括号包装模式。
namespace Foo
{
}
namespace Foo
{}

最后更新: 2022-10-31