# 格式选项
[TOC]
## break-closing-braces
**--break-closing-braces 或 -y**
当设置风格为 **--style=java, --style=kr, --style=stroustrup, --style=linux, 或 --style=1tbs** 时,条件语句等分支语句(例如:'else', 'catch'等分支)与它们之前大括号结束后换行。其他的风格,已经包含了此选项设置。
```
void Foo(bool isFoo) {
if (isFoo) {
bar();
} else {
anotherBar();
}
}
格式化为(换行 'else'):
void Foo(bool isFoo) {
if (isFoo) {
bar();
}
else {
anotherBar();
}
}
```
## break-elseifs
**--break-elseifs 或 -e**
将“else if”语句组合拆分成单独的两行。如果使用了 [keep-one-line-statements]() 选项,则此选项无效,“else if”语句将保持原样。如果不使用此选项,“else If”语句组合将放在一行上。
```
if (isFoo) {
bar();
}
else if (isFoo1()) {
bar1();
}
else if (isFoo2()) {
bar2;
}
格式化为:
if (isFoo) {
bar();
}
else
if (isFoo1()) {
bar1();
}
else
if (isFoo2()) {
bar2();
}
```
## break-one-line-headers
**--break-one-line-headers 或 -xb**
条件语句或循环语句(例如:'if', 'while', 'else'等)如果写在一行,将会被格式化成多行语句。如果语句包含在大括号中,大括号将根据设置的[风格样式](风格选项.md)进行格式化。
如果设置了 [keep-one-line-statements]() 选项,则不会格式化成多行语句。如果设置了 [keep-one-line-blocks]() 选项,并且条件语句或循环语句包含在代码块中,那么那一行代码块将不会被格式化。
```
void Foo(bool isFoo)
{
if (isFoo1) bar1();
if (isFoo2) { bar2(); }
}
格式化为:
void Foo(bool isFoo)
{
if (isFoo1)
bar1();
if (isFoo2) {
bar2();
}
}
```
## add-braces
**--add-braces 或 -j**
给单行的条件语句或循环语句(例如:'if', 'for', 'while'等)加上大括号。语句必须在一行上。大括号将根据所设置的风格样式添加。如果没有要求样式,大括号将被附加到语句之后。
如果设置了 [keep-one-line-statements]() 选项,则不会将大括号添加到多行语句中。如果设置了 [keep-one-line-blocks]() 选项,大括号将不会添加到一行代码块中。如果与 **--add-one-line-braces** 一起使用,结果将是一行大括号。
```
if (isFoo)
isFoo = false;
格式化为:
if (isFoo) {
isFoo = false;
}
```
## add-one-line-braces
**--add-one-line-braces 或 -J**
给单行的条件语句或循环语句(例如:'if', 'for', 'while'等)加上单独一行的大括号语句。语句必须在单独一行上。该选项类似于 **--keep-one-line-blocks** 选项,不会将单行大括号语句格式成多行语句。
```
if (isFoo)
isFoo = false;
格式化为:
if (isFoo)
{ isFoo = false; }
```
## remove-braces
**--remove-braces 或 -xj**
如果条件语句或循环语句(例如:'if', 'for', 'while'等)只有单独一行,则移除大括号。如果设置了 **--add-braces** 或 **--add-one-line-braces** 选项,格式化的结果还是会带有大括号。大括号不会从“One True Brace Style”中被移除(**--style=1tbs**)。
```
if (isFoo)
{
isFoo = false;
}
格式化为:
if (isFoo)
isFoo = false;
```
## break-return-type
**--break-return-type 或 -xB**
**--break-return-type-decl 或 -xD**
从函数名中换行返回类型。这两个选项用于函数定义(**-xB**),以及函数声明(**-xD**)。如果与选项 [attach-return-type]() 一起使用,那么结果将是换行返回类型。这个选项对 Objective-C 函数没有影响。
```
void Foo(bool isFoo);
格式化为:
void
Foo(bool isFoo);
```
## attach-return-type
**--attach-return-type 或 -xf**
**--attach-return-type-decl 或 -xh**
将返回类型附加到函数名之前。这两个选项分别用于函数定义(**-xf**)和函数声明**(-xh**)。它们的目的是撤消 [break-return-typ]() 选项。如果与 [break-return-typ]() 一起使用,结果将是破坏返回类型。这个选项对 Objective-C 函数没有影响。
```
void
Foo(bool isFoo);
格式化为:
void Foo(bool isFoo);
```
## keep-one-line-blocks
**--keep-one-line-blocks 或 -O**
不要将单独一行代码块格式成多行。
```
if (isFoo)
{ isFoo = false; cout << isFoo << endl; }
保持不变
```
## keep-one-line-statements
**--keep-one-line-statements 或 -o**
不要将复杂语句和位于一行中的多个语句分开。
```
if (isFoo)
{
isFoo = false; cout << isFoo << endl;
}
保持不变
```
## convert-tabs
**--convert-tabs 或 -c**
将制表符转换为行非缩进部分的空格。插入的空格数将保持制表符的间距。使用当前每个制表符的空格设置。如果在每个制表符更改空格时使用 [convert-tabs](),它可能不会产生预期的结果。引号内的制表符不会被改变。
## close-templates
**--close-templates 或 -xy**
移除模板定义的关闭尖括号之前的空格。现在 c++ 11 标准允许关闭结束尖括号。在进行更改之前,请确保编译器支持这一点。
```
Stack< int, List< int > > stack1;
格式化为:
Stack< int, List< int >> stack1;
```
## remove-comment-prefix
**--remove-comment-prefix 或 -xp**
删除注释中每一行开头多余的星号符“\*”,小于一个缩进的文本缩进为一个缩进,大于一个缩进的文本不会更改。从一行开始但是没有前面的‘\*’的多行注释,为了一致性而缩进到一个缩进中。这可以稍微修改注释掉的代码块的缩进。包含所有“\*”的行保持不变。从注释关闭 '*/'中删除额外的空格。
```
/*
* comment line 1
* comment line 2
*/
格式化为:
/*
comment line 1
comment line 2
*/
```
## max-code-length
## break-after-logical
**--max-code-length=# 或 -xC#**
**--break-after-logical 或 -xL**
如果代码超过 # 个字符,最大代码长度将断行。有效值是 50 到 200 之间。没有逻辑条件的行将在逻辑运算符(||,&&等)、逗号、括号、分号或空格上换行。
有一些代码不会被该选项格式化,比如注释、引号和数组。如果设置了 [keep‑one‑line‑blocks]() 或 [add-one-line-braces]() 选项,也不会被格式化。如果设置了 [keep‑one‑line‑statements]() 选项,超过最大代码长度时会在分号位置折行。如果在最大代码长度内没有可用的断点,则在最大代码长度之后的第一个可用断点处折行。
默认情况下,逻辑条件将首先放在第一行中。选项 [break‑after‑logical]() 将导致逻辑运算符放在最后。如果没有设置 **max‑code‑length**,此选项** break-after-logical** 无效。
```
if (thisVariable1 == thatVariable1 || thisVariable2 == thatVariable2 || thisVariable3 == thatVariable3)
bar();
格式化为:
if (thisVariable1 == thatVariable1
|| thisVariable2 == thatVariable2
|| thisVariable3 == thatVariable3)
bar();
格式化为 (with break‑after‑logical):
if (thisVariable1 == thatVariable1 ||
thisVariable2 == thatVariable2 ||
thisVariable3 == thatVariable3)
bar();
```
## mode
**--mode=c**
**--mode=cs**
**--mode=java**
缩进C类型、C# 或 Java 文件。C类型文件有C、C++、C++ /CLI 和 Objective-C。该选项通常依据每个文件的文件扩展名设置。您可以使用此条目覆盖设置。它将用于所有文件,无论文件扩展名如何。它允许格式化程序识别语言特定的语法,例如C++类、模板和关键字。
