# 缩进选项
[TOC]
## indent-classes
**--indent-classes 或 -C**
缩进类和结构体的代码块,使整个代码块缩进。只有当访问修饰符‘public:’、‘protected:’或‘private:’在结构体中某处被声明时,结构体代码块才能进行缩进。此选项仅对 c++ 文件有效。
```
class Foo
{
public:
Foo();
virtual ~Foo();
};
格式化为:
class Foo
{
public:
Foo();
virtual ~Foo();
};
```
## indent-modifiers
**--indent-modifiers 或 -xG**
缩进类和结构体的访问修饰符、“public:”、“protected:”和“private:”,但是只进行半个缩进。类的其它部分不执行缩进。此选项仅对c++ 文件有效。如果与 [indent-classes]() 一起使用,这个选项将被忽略。
```
class Foo
{
public:
Foo();
virtual ~Foo();
};
格式化为:
class Foo
{
public:
Foo();
virtual ~Foo();
};
```
## indent-switches
**--indent-switches 或 -S**
缩进 Switch 语句模块,使 case 语句在 Switch 模块中缩进。整个 case 块都是缩进的。
```
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
格式化为:
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
```
## indent-cases
**--indent-cases 或 -K**
缩进 case 语句的代码块以 case 关键字为缩进起始位置。没有包含在大括号中的 case 语句不会缩进。
```
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
格式化为:
switch (foo)
{
case 1:
a += 1;
break;
case 2:
{
a += 2;
break;
}
}
```
## indent-namespaces
**--indent-namespaces 或 -N**
为命名空间代码块添加额外的缩进。这个选项对 Java 文件没有影响。它还将缩进 CORBA IDL 模块语句。
```
namespace foospace
{
class Foo
{
public:
Foo();
virtual ~Foo();
};
}
格式化为:
namespace foospace
{
class Foo
{
public:
Foo();
virtual ~Foo();
};
}
```
## indent-after-parens
**--indent-after-parens 或 -xU**
在左括号“(”或者等于号“=”之后的语句换行时,每行进行缩进,而不是与符号对齐。这包括函数定义和声明以及返回语句。缩进长度可以通过使用下面的 [indent-continuation]() 选项来修改。此选项可用于显示比例字体的编辑器。
```
void Foo(bool bar1,
bool bar2)
{
isLongFunction(bar1,
bar2);
isLongVariable = foo1
|| foo2;
}
格式化为:
void Foo(bool bar1,
bool bar2)
{
isLongFunction(bar1,
bar2);
isLongVariable = foo1
|| foo2;
}
```
## indent-continuation
**--indent-continuation=# 或 -xt#**
在左括号“(”或者等于号“=”之后的语句换行时,每行进行一定长度的缩进。这包括函数定义和声明。它还将修改之前的 [indent-after-parens]() 选项。符号 # 的值表示缩进的个数,有效值是从 0 到 4 的整数值。如果不设置此选项,则使用默认值为:1。
```
isLongVariable =
foo1 ||
foo2;
isLongFunction(
bar1,
bar2);
格式化为(indent-continuation=3),三个缩进:
isLongVariable =
foo1 ||
foo2;
isLongFunction(
bar1,
bar2);
```
## indent-labels
**--indent-labels 或 -L**
为 goto 标签添加额外的缩进,使它们看起来比当前缩进少1个缩进,而不是与左侧对齐(默认)。
```
void Foo() {
while (isFoo) {
if (isFoo)
goto error;
...
error:
...
}
}
格式化为(缩进标签 'error:'):
void Foo() {
while (isFoo) {
if (isFoo)
goto error;
...
error:
...
}
}
```
## indent-preproc-block
**--indent-preproc-block 或 -xW**
在最初级别处缩进预处理代码块,并立即在命名空间内缩进。对于缩进的内容有限制。方法、类、数组等中的代码块不会缩进。包含大括号或多行定义语句的代码块不会缩进。如果没有这个选项,预处理代码块就不会缩进。
```
#ifdef _WIN32
#include <windows.h>
#ifndef NO_EXPORT
#define EXPORT
#endif
#endif
格式化为:
#ifdef _WIN32
#include <windows.h>
#ifndef NO_EXPORT
#define EXPORT
#endif
#endif
```
## indent-preproc-define
**--indent-preproc-define 或 -w**
缩进以反斜杠结尾的多行预处理定义。应该与 **--convert-tabs** 一起使用,以获得预期的结果。在混乱的预处理模块中,并不能很好地工作。如果未设置这个选项,预处理语句保持不变。
```
#define Is_Bar(arg,a,b) \
(Is_Foo((arg), (a)) \
|| Is_Foo((arg), (b)))
格式化为:
#define Is_Bar(arg,a,b) \
(Is_Foo((arg), (a)) \
|| Is_Foo((arg), (b)))
```
## indent-preproc-cond
**--indent-preproc-cond 或 -xw**
缩进预处理条件语句到与源代码相同的级别。
```
isFoo = true;
#ifdef UNICODE
text = wideBuff;
#else
text = buff;
#endif
格式化为:
isFoo = true;
#ifdef UNICODE
text = wideBuff;
#else
text = buff;
#endif
```
## indent-col1-comments
**--indent-col1-comments 或 -Y**
缩进从第一列开始的 c++ 注释。默认情况下,从第一列开始的 c++ 注释被认为是注释输出代码,而不是缩进。这个选项将允许注释与代码缩进对齐。
```
void Foo()
{
// comment
if (isFoo)
bar();
}
格式化为:
void Foo()
{
// comment
if (isFoo)
bar();
}
```
## min-conditional-indent
**--min-conditional-indent=# 或 -m#**
设置在由多行条件语句之前添加的最小缩进。这个缩进有助于轻松地将标题与后面的命令语句分开。符号 # 的值表示缩进最小值。缩进可能更大,以便与前一行中的数据对齐
> 有效值为:
> > 0:没有最小缩进,这些行将与前一行的左括号对齐。
> > 1:缩进至少一个额外的缩进。
> > 2:缩进至少两个额外的缩进。
> > 3:缩进至少一半的额外缩进。这是为较长缩进设计的(例如:8 个空格长度的缩进)。
> 默认值是2,两个额外缩进。
```
// default setting makes this non-braced code clear
if (a < b
|| c > d)
foo++;
// but creates an exaggerated indent in this braced code
if (a < b
|| c > d)
{
foo++;
}
格式化为(当设置 --min-conditional-indent=0):
// setting makes this non-braced code less clear
if (a < b
|| c > d)
foo++;
// but makes this braced code clearer
if (a < b
|| c > d)
{
foo++;
}
```
## max-continuation-indent
**--max-continuation-indent=# 或 -M#**
设置最大的 # 个空格来缩进后续换行。符号 # 表示一定数量的列,并且不能小于 40 或大于 120。如果没有设置值,则使用默认值40。此选项将防止后续换行过分向右扩展。设置更大的值将允许代码进一步向右扩展。
```
fooArray[] = { red,
green,
blue };
fooFunction(barArg1,
barArg2,
barArg3);
格式化为(with larger value):
fooArray[] = { red,
green,
blue };
fooFunction(barArg1,
barArg2,
barArg3);
```
