简介
AStyle
,即 Artistic Style
,是一个可用于 C, C++, C++/CLI, Objective‑C, C# 和Java
编程语言格式化和美化的工具。
下载
1、Astyle官网下载地址:https://sourceforge.net/projects/astyle
2、Astyle官方文档地址:http://astyle.sourceforge.net/astyle.html
3、Astyle风格设置:参考《Google 开源项目 c/c++风格》
安装
windows
windows下有二进制文件,直接下载,解压后,把二进制程序加入环境变量即可。
linux
Linux下需要自己下载源码,编译安装。
- 解压到指定目录
-
在终端下如下操作即可
cd ./AStyle cmake CMakeLists.txt make make install
用法
命令行
命令行格式:
astyle [OPTIONS] SourceFilePath1 SourceFilePath2 SourceFilePath3 [ . . . ]
方括号 []
表示可以输入多个选项或多个文件名。
设置单个文件格式的示例:
astyle --style=allman /home/project/foo.cpp
以递归方式格式化 c/c++ 文件的示例:
astyle --style=allman --recursive /home/project/*.c,*.cpp,*.cc,*.h,*.hpp
选项
书写样式
long options
以’–‘开头,一次必须写一个。
example: --style=allman --indent=spaces=4
short options
以单个’-‘开头,可以写在一起
example:-bps4
== -b -p -s4
禁用格式化设置
可以通过在源代码中插入注释标记来禁用格式和缩进。
块禁用
可以使用”关闭”和”打开”标记禁用代码块。标记作为注释包含在源文件中。
注释可以是 C 注释 (/…/) 或C++行注释 (//)。标记必须包含在单行注释中。如果注释超过一行,缩进标记将被忽略。
标签中可以包含其他信息,
开头标记是”缩进-关闭“,结尾标记是”缩进-打开“。它们可以在程序中的任何位置使用,条件是在标记之间部分禁用解析。禁用部分语句可能会导致结束标记后面的格式不正确。如果发生这种情况,请展开标记以包含其他代码。
以下内容保留预处理器定义的格式:
// *INDENT-OFF*
#define FOO_DECLARE_int32_(name) \
FOO_API_ extern ::Int32 FOO_FLAG(name)
// *INDENT-ON*
行禁用
如果符号填充不正确,则手动填充该符号可能会解决问题。如果它仍然被错误地填充,则可能需要禁用格式设置。为避免使用上面的”禁用块”标记,可以使用单行禁用。
行尾注释标记”*NOPAD*
“将禁用”pad-oper”,”align-pointer”和”align-reference”选项。解析不会停止,所有其他格式都将应用于该行。标记仅适用于一行。
以下各项可防止更改运算符填充:
size_t foo = (unsigned int) -1; // *NOPAD*
基本样式
default brace style
如果未请求大括号样式,则将使用默认大括号样式。左大括号不会更改,右大括号将从前一行中断开。有一些例外。
--style=allman / --style=bsd / --style=break / -A1
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
--style=java / --style=attach / -A2
Java 样式使用附加的大括号。
int Foo(bool isBar) {
if (isBar) {
bar();
return 1;
} else
return 0;
}
--style=kr / --style=k&r / --style=k/r / -A3
Kernighan & Ritchie 风格使用 linux 大括号。左大括号从命名空间、类和函数定义中断开。大括号附加到其他所有内容,包括函数中的数组、结构、枚举和语句。
使用 k&r 选项可能会导致问题,因为 &.这可以通过将k&r括在引号中(例如–style=”k&r”)或使用其中一个替代词–style=kr或–style=k/r来解决。
int Foo(bool isBar)
{
if (isBar) {
bar();
return 1;
} else
return 0;
}
--style=stroustrup / -A4
Stroustrup 样式使用 linux 大括号,其中右大括号与右大括号断开(例如 –break-close-headers)。左大括号仅从函数定义中断开。左大括号附加到其他所有内容,包括函数中的命名空间、类、数组、结构、枚举和语句。此样式经常与”附加-关闭-同时”、选项卡式缩进和 5 个空格的缩进一起使用。
int Foo(bool isBar)
{
if (isBar) {
bar();
return 1;
}
else
return 0;
}
--style=whitesmith / -A5
白匠风格使用破碎的缩进牙套。开关块和类块缩进以防止使用以下大小写语句和C++类修饰符(公共、私有、受保护)进行”挂起缩进”。
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
--style=vtk / -A15
VTK(可视化工具包)样式使用断开的缩进大括号,但类、数组、结构、枚举和函数定义的左大括号除外。开关块缩进以防止使用以下大小写语句进行”挂起缩进”。
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
--style=ratliff / --style=banner / -A6
Ratliff 样式使用附加的缩进大括号。开关块和类块缩进以防止使用以下大小写语句和C++类修饰符(公共、私有、受保护)进行”挂起缩进”。
int Foo(bool isBar) {
if (isBar) {
bar();
return 1;
}
else
return 0;
}
--style=gnu / -A7
GNU 样式使用断括号。额外的缩进仅添加到函数中的块中。整个块是缩进的,而不仅仅是支撑。此样式经常与 2 个空格的缩进一起使用。
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
--style=linux / --style=knf / -A8
Linux 风格使用 linux 大括号。左大括号从命名空间、类和函数定义中断开。大括号附加到其他所有内容,包括函数中的数组、结构、枚举和语句。最小条件缩进量为半缩进。如果你想要一个不同的最小条件缩进,请改用 K&R 样式。此样式最适合使用大缩进。它经常与 8 个空格的缩进一起使用。
也称为内核范式(KNF)样式,这是Linux BSD内核中使用的样式。
int Foo(bool isBar)
{
if (isFoo) {
bar();
return 1;
} else
return 0;
}
--style=horstmann / --style=run-in / -A9
Horstmann 样式使用断括号和磨合语句。开关缩进以允许磨合打开的开关块。这种样式经常与3个空格的缩进一起使用。
int Foo(bool isBar)
{ if (isBar)
{ bar();
return 1;
}
else
return 0;
}
--style=1tbs / --style=otbs / -A10
“One True Brace Style”使用 linux 大括号,并向未加括号的一行条件语句添加大括号。左大括号从命名空间、类和函数定义中断开。大括号附加到其他所有内容,包括函数中的数组、结构、枚举和语句。
在下面的示例中,大括号已添加到”return 0;”语句中。选项 –add-one-line-braces 也可以与此样式一起使用。
int Foo(bool isBar)
{
if (isFoo) {
bar();
return 1;
} else {
return 0;
}
}
--style=google / -A14
Google 样式使用附加的大括号和缩进的类访问修饰符。有关缩进修饰符格式的示例,请参阅缩进修饰符选项。这实际上不是一种独特的大括号样式,而是具有非大括号变体的 Java 样式。此样式经常与 2 个空格的缩进一起使用。
int Foo(bool isBar) {
if (isBar) {
bar();
return 1;
} else
return 0;
}
--style=mozilla / -A16
Mozilla风格使用linux大括号。左大括号从类、结构、枚举和函数定义中分离出来。大括号附加到其他所有内容,包括命名空间、数组和函数中的语句。此样式经常与 2 个空格的缩进和 –break-return-type 一起使用。
int Foo(bool isBar)
{
if (isBar) {
bar();
return 1;
} else
return 0;
}
--style=pico / -A11
Pico 样式使用断括号和带有右大括号的磨合语句。右大括号附加到块中的最后一行。开关缩进以允许磨合打开的开关块。该样式意味着 keep-one-line-block 和 keep-one-line-statement。如果使用加大括号,它们将被添加为单行大括号。此样式经常与 2 个空格的缩进一起使用。
int Foo(bool isBar)
{ if (isBar)
{ bar();
return 1; }
else
return 0; }
--style=lisp / --style=python / -A12
Lisp 样式使用附加的左大括号和右大括号。右大括号附加到块中的最后一行。该样式意味着保留一行语句,但不是保留一行块。此样式不支持单行大括号。如果使用添加一行大括号,它们将被添加为多行大括号。
int Foo(bool isBar) {
if (isBar) {
bar()
return 1; }
else
return 0; }
选项卡选项
以下示例显示了空格字符。空格用 . (点)表示,制表符用>(大于)表示。
default indent
如果未设置缩进选项,则将使用默认选项 4 个空格(例如 -s4 –indent=spaces=4)。
默认值:
void Foo() {
....if (isBar1
............&& isBar2) // indent of this line can be changed with min-conditional-indent
........bar();
}
--indent=spaces / --indent=spaces=<span class="option">#</span><span> </span>/ -s<span class="option">#</span>
每个缩进使用 # 空格进行缩进(例如 -s3 –indent=spaces=3)。# 必须介于 2 和 20 之间。未指定 # 将导致每个缩进的默认值为 4 个空格。
缩进 = 空格 = 3
void Foo() {
...if (isBar1
.........&& isBar2) // indent of this line can be changed with min-conditional-indent
......bar();
}
--indent=tab / --indent=tab=<span class="option">#</span><span> </span>/ -t / -t<span class="option">#</span>
使用制表符进行缩进以进行缩进,并使用空格进行延续线对齐。这可确保无论查看器的选项卡大小如何,代码都能正确显示。将每个缩进视为 # 空格(例如 -t6 / –indent=tab=6)。# 必须介于 2 和 20 之间。如果未设置 #,则将缩进视为 4 个空格。
缩进 = 选项卡:
void Foo() {
> if (isBar1
> ........&& isBar2) // indent of this line can be changed with min-conditional-indent
> > bar();
}
with style=linux, indent=tab=8:
void Foo()
{
> if (isBar1
> ....&& isBar2) // indent of this line can NOT be changed with style=linux
> > bar();
}
--indent=force-tab / --indent=force-tab=<span class="option">#</span><span> </span>/ -T / -T<span class="option">#</span>
如果可能,请使用所有制表符缩进。如果延续行不是偶数个制表符,则将在末尾添加空格。将每个制表符视为 # 空格(例如 -T6 / –indent=force-tab=6)。# 必须介于 2 和 20 之间。如果未设置 # ,则将选项卡视为 4 个空格。
缩进 = 强制选项卡:
void Foo() {
> if (isBar1
> > > && isBar2) // indent of this line can be changed with min-conditional-indent
> > bar();
}
--indent=force-tab-x / --indent=force-tab-x=<span class="option">#</span><span> </span>/ -xT / -xT<span class="option">#</span>
此强制制表符选项允许将制表符长度设置为与缩进长度不同的长度。这可能会导致缩进是制表符和空格的混合。如果可能,将使用选项卡进行缩进。如果无法使用制表符缩进,则将改用空格。
此选项设置 选项卡长度。 将每个制表符视为 # 空格(例如 -xT6 / –indent=force-tab-x=6。# 必须介于 2 和 20 之间。如果未设置 #,则将选项卡视为 8 个空格。要更改默认的 4 个空格的 缩进长度 ,还必须使用”缩进=force-tab”选项。
indent=force-tab-x(默认选项卡长度为 8,默认缩进长度为 4):
void Foo() {
....if (isBar1
> ....&& isBar2) // indent of this line can be changed with min-conditional-indent
> bar();
}
大括号选项
--attach-namespaces / -xn
将大括号附加到命名空间语句。无论使用何种大括号样式,都会执行此操作。它还会将大括号附加到 CORBA IDL 模块语句。
大括号始终附加到命名空间语句:
namespace FooName {
...
}
--attach-classes / -xc
将大括号附加到类语句。无论使用何种大括号样式,都会执行此操作。
大括号始终附加到类语句:
class FooClass {
...
};
--attach-inlines / -xl
将大括号附加到类和结构内联函数定义。此选项优先于除 Horstmann 和 Pico(磨合样式)之外的所有样式。它仅对C++文件有效。
所有大括号都附加到类和结构内联方法定义:
class FooClass
{
void Foo() {
...
}
};
--attach-extern-c / -xk
将大括号附加到带大括号的外部”C”语句。无论使用何种大括号样式,都会执行此操作。此选项仅对C++文件有效。
作为函数定义一部分的外部”C”语句将根据请求的大括号样式进行格式化。带大括号的外部”C”语句不受大括号样式的影响,此选项是更改它们的唯一方法。
此选项将大括号附加到带大括号的外部”C”语句:
#ifdef __cplusplus
extern "C" {
#endif
但函数定义是根据请求的大括号样式进行格式化的:
extern "C" EXPORT void STDCALL Foo()
{}
--attach-closing-while / -xV
将”do-while”语句的结束”while”附加到右大括号。这优先于大括号样式和分隔右大括号选项。
do
{
bar();
++x;
}
while x == 1;
成为:
do
{
bar();
++x;
} while x == 1;
缩进选项
--indent-classes / -C
缩进”类”和”结构”块,以便整个块缩进。仅当在结构中的某个位置声明了访问修饰符”public:”、”protected:”或”private:”时,结构块才会缩进。此选项仅对C++文件有效。
class Foo
{
public:
Foo();
virtual ~Foo();
};
成为:
class Foo
{
public:
Foo();
virtual ~Foo();
};
--indent-modifiers / -xG
缩进”类”和”结构”访问修饰符,”公共:”,”受保护:”和”私有:”,半缩进。类的其余部分不缩进。此选项仅对C++文件有效。如果与缩进类一起使用,则此选项将被忽略。
class Foo
{
public:
Foo();
virtual ~Foo();
};
成为:
class Foo
{
public:
Foo();
virtual ~Foo();
};
--indent-switches / -S
缩进”开关”块,以便”case X:”语句缩进到开关块中。整个大小写块呈缩进状态。
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 / -K
从 “” 标头缩进 “” 块。未括在块中的案例语句不会缩进。case X:
case X:
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 / -N
向命名空间块添加额外的缩进。此选项对 Java 文件没有影响。它还将缩进 CORBA IDL 模块语句。
namespace foospace
{
class Foo
{
public:
Foo();
virtual ~Foo();
};
}
成为:
namespace foospace
{
class Foo
{
public:
Foo();
virtual ~Foo();
};
}
--indent-after-parens / -xU
缩进(而不是对齐)包含开头 paren ‘(’ 或赋值 ‘=’ 的行后面的延续行。这包括函数定义和声明以及 return 语句。可以使用以下缩进-继续选项修改缩进。对于显示比例字体的编辑器,此选项可能是首选。
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=<span class="option">#</span><span> </span>/ -xt<span class="option">#</span>
为以开头的 paren ‘(’ 或赋值 ‘=’ 结尾的行设置继续缩进。这包括函数定义和声明。它还将修改上一个”在paren之后缩进”选项。# 的值表示缩进数。有效值是从 0 到 4 的整数值。如果未使用此选项,则使用默认值 1。
isLongVariable =
foo1 ||
foo2;
isLongFunction(
bar1,
bar2);
变为(缩进-延续 = 3):
isLongVariable =
foo1 ||
foo2;
isLongFunction(
bar1,
bar2);
--indent-labels / -L
向标签添加额外的缩进,使它们看起来比当前缩进少 1 个缩进,而不是向左刷新(默认值)。
void Foo() {
while (isFoo) {
if (isFoo)
goto error;
...
error:
...
}
}
变为(缩进的”错误:”):
void Foo() {
while (isFoo) {
if (isFoo)
goto error;
...
error:
...
}
}
--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 / -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 / -xw
将预处理器条件语句缩进到与源代码相同的级别。
isFoo = true;
#ifdef UNICODE
text = wideBuff;
#else
text = buff;
#endif
成为:
isFoo = true;
#ifdef UNICODE
text = wideBuff;
#else
text = buff;
#endif
--indent-col1-comments / -Y
缩进C++注释,从第一列开始。默认情况下,C++第一列开头的注释假定为注释掉的代码,而不是缩进。此选项将允许注释与代码一起缩进。
void Foo()\n"
{
// comment
if (isFoo)
bar();
}
成为:
void Foo()\n"
{
// comment
if (isFoo)
bar();
}
--min-conditional-indent=<span class="option">#</span><span> </span>/ -m<span class="option">#</span>
设置在由多行组成标题时添加的最小缩进。此缩进有助于轻松地将标头与后面的命令语句分开。# 的值表示缩进数,并且是最小值。缩进量可能会更大,以便与前一行上的数据保持一致。有效值为:0 - 无最小缩进。这些行将与前一行上的 paren 对齐。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=<span class="option" _istranslated="1">0</span>
时):
// 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=<span class="option">#</span><span> </span>/ -M<span class="option">#</span>
设置最大 # 空格以缩进延续行。# 表示列数,并且不得小于 40 或大于 120。如果未设置任何值,则将使用默认值 40。此选项将防止延续线向右延伸太远。设置较大的值将允许代码进一步向右扩展。
fooArray[] = { red,
green,
blue };
fooFunction(barArg1,
barArg2,
barArg3);
变为(具有较大的值):
fooArray[] = { red,
green,
blue };
fooFunction(barArg1,
barArg2,
barArg3);
填充选项
--break-blocks / -f
在标题块周围填充空行(例如,”if”,”for”,”while…“)。
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
成为:
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
--break-blocks=all / -F
在标题块周围填充空行(例如,”if”,”for”,”while…“)。将关闭标头块(例如”else”、”catch”)视为独立块。
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
成为:
isFoo = true;
if (isFoo) {
bar();
} else {
anotherBar();
}
isBar = false;
--pad-oper / -p
在运算符周围插入空格填充。这也将填充逗号。如果可能,任何行尾注释都将保留在原始列中。请注意,没有取消pad的选项。一旦填充,它们就会保持填充状态。
if (foo==2)
a=bar((b-c)*a,d--);
成为:
if (foo == 2)
a = bar((b - c) * a, d--);
--pad-comma / -xg
在逗号后插入空格填充。如果使用垫操作,则不需要这样做。如果可能,任何行尾注释都将保留在原始列中。请注意,没有取消pad的选项。一旦填充,它们就会保持填充状态。
if (isFoo(a,b))
bar(a,b);
成为:
if (isFoo(a, b))
bar(a, b);
--pad-paren / -P
在外部和内部的 paren 周围插入空间填充。如果可能,任何行尾注释都将保留在原始列中。
if (isFoo((a+2), b))
bar(a, b);
成为:
if ( isFoo ( ( a+2 ), b ) )
bar ( a, b );
--pad-paren-out / -d
仅在外部的 paren 周围插入空格填充。空的 Parens 将不会填充。如果可能,任何行尾注释都将保留在原始列中。这可以与下面的unpad-paren一起使用,以删除不需要的空间。
if (isFoo((a+2), b))
bar(a, b);
成为:
if (isFoo ( (a+2), b) )
bar (a, b);
--pad-first-paren-out / -xd
仅在外部的系列中的第一个 paren 周围插入空格填充。空的 Parens 将不会填充。如果可能,任何行尾注释都将保留在原始列中。这可以与下面的unpad-paren一起使用,以删除不需要的空间。如果与 pad-paren 或 pad-paren-out 一起使用,则此选项将被忽略。如果与pad-paren-in一起使用,结果将是pad-paren。
if (isFoo((a+2), b))
bar(a, b);
成为:
if (isFoo ((a+2), b))
bar (a, b);
--pad-paren-in / -D
仅在内部插入 paren 周围的空间填充。如果可能,任何行尾注释都将保留在原始列中。这可以与下面的unpad-paren一起使用,以删除不需要的空间。
if (isFoo((a+2), b))
bar(a, b);
成为:
if ( isFoo( ( a+2 ), b ) )
bar( a, b );
--pad-header / -H
在标题(例如,”if”、”for”、”while”…)和下面的 paren 之间插入空格填充。如果可能,任何行尾注释都将保留在原始列中。这可以与unpad-paren一起使用以删除不需要的空间。
if(isFoo((a+2), b))
bar(a, b);
成为:
if (isFoo((a+2), b))
bar(a, b);
--unpad-paren / -U
去除内部和外部的填充物周围的额外空间填充物。如果可能,任何行尾注释都将保留在原始列中。此选项可与上面的 paren 填充选项 pad-paren、pad-paren-out、pad-paren-in 和 pad-header 结合使用。只有其他选项未请求的填充才会被删除。
例如,如果源在内部和外部都填充了 parens,而您只想在内部填充。您需要使用 unpad-paren 来移除外部填充,并使用 pad-paren-in 来保留内部填充。仅使用垫入>不会去除外部填充。
if ( isFoo( ( a+2 ), b ) )
bar ( a, b );
变为(不请求填充选项):
if(isFoo((a+2), b))
bar(a, b);
--delete-empty-lines / -xe
删除函数或方法中的空行。不会删除函数或方法之外的空行。如果与断点块或断点块 =all 一起使用,它将删除除断块选项添加的行之外的所有行。
void Foo()
{
foo1 = 1;
foo2 = 2;
}
成为:
void Foo()
{
foo1 = 1;
foo2 = 2;
}
--fill-empty-lines / -E
用前一行的空白填充空行。
--align-pointer=type / -k1<br/>--align-pointer=middle / -k2<br/>--align-pointer=name / -k3
将指针或引用运算符(*、&或 ^)附加到变量类型(左)或变量名称(右),或将其放在类型和名称(中间)之间。如果可能,将保留类型和名称之间的间距。此选项适用于 C/C++、C++/CLI 和 C# 文件。要单独设置参照的格式,请使用以下对齐参照选项。
char* foo1;
char & foo2;
string ^s1;
变为(使用对齐指针 = 类型):
char* foo1;
char& foo2;
string^ s1;
char* foo1;
char & foo2;
string ^s1;
变为(对齐指针 = 中间):
char * foo1;
char & foo2;
string ^ s1;
char* foo1;
char & foo2;
string ^s1;
变为(使用对齐指针 = 名称):
char *foo1;
char &foo2;
string ^s1;
--align-reference=none / -W0<br/>--align-reference=type / -W1<br/>--align-reference=middle / -W2<br/>--align-reference=name / -W3
此选项将对齐与指针分开的引用。此选项不会更改指针。如果要使指针和参照对齐相同,请使用前面的对齐指针选项。”对齐-引用=无”选项不会更改引用对齐方式。其他选项与对齐指针相同。此选项适用于 C/C++、C++/CLI 和 C# 文件。
char &foo1;
变为(使用对齐引用 = 类型):
char& foo1;
char& foo2;
变为(对齐引用 = 中间):
char & foo2;
char& foo3;
变为(使用对齐引用 =名称):
char &foo3;
格式设置选项
--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 / -e
将”else if”标头组合拆分为单独的行。如果使用 keep-one-line-statement,则此选项不起作用,”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 / -xb
将驻留在同一行的语句中的一行标题(例如,”if”、”while”、”else”等)中断。如果语句括在大括号中,则大括号将根据请求的大括号样式进行格式设置。
如果请求保留一行语句,则不会中断多语句行。如果请求保留一行块并且标头包含在块中,则不会破坏一行块。
void Foo(bool isFoo)
{
if (isFoo1) bar1();
if (isFoo2) { bar2(); }
}
成为:
void Foo(bool isFoo)
{
if (isFoo1)
bar1();
if (isFoo2) {
bar2();
}
}
--add-braces / -j
将大括号添加到未带括号的一行条件语句(例如,”if”、”for”、”while”等)。语句必须位于一行上。大括号将根据请求的支撑样式添加。如果未请求样式,则将附加大括号。
如果请求保留一行语句,则不会将大括号添加到多语句行中。如果请求保留一行块,则不会将大括号添加到单行块中。如果与 –add-one-line-braces 一起使用,则结果将是一行大括号。
if (isFoo)
isFoo = false;
成为:
if (isFoo) {
isFoo = false;
}
--add-one-line-braces / -J
向未加括号的一行条件语句添加一行大括号(例如,”if”、”for”、”while”等)。语句必须位于一行上。该选项意味着 –keep-one-line-block,并且不会破坏一行块。
if (isFoo)
isFoo = false;
成为:
if (isFoo)
{ isFoo = false; }
--remove-braces / -xj
从条件语句中删除大括号(例如,”if”、”for”、”while…“)。该语句必须是单行上的单个语句。如果还使用 –add-braces 或 –add-one-line-braces,则结果将是添加大括号。大括号不会从”一个真正的大括号样式”中删除,–style=1tbs。
if (isFoo)
{
isFoo = false;
}
成为:
if (isFoo)
isFoo = false;
--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 / -xf
--attach-return-type-decl / -xh
将返回类型附加到函数名称。这两个选项分别用于函数定义 (-xf) 和函数声明或签名 (-xh)。它们旨在撤消 –break-return-type 选项。如果与 –break-return-type 一起使用,则结果将是中断返回类型。此选项对 Objective-C 函数没有影响。
void
Foo(bool isFoo);
成为:
void Foo(bool isFoo);
--keep-one-line-blocks / -O
不要破坏一行块。
if (isFoo)
{ isFoo = false; cout << isFoo << endl; }
保持不变。
--keep-one-line-statements / -o
不要破坏驻留在一行上的复杂语句和多个语句。
if (isFoo)
{
isFoo = false; cout << isFoo << endl;
}
保持不变。
--convert-tabs / -c
将制表符转换为行的非缩进部分中的空格。插入的空格数将保持选项卡的间距。使用每个选项卡的空格的当前设置。如果在更改每个选项卡的空格时使用转换选项卡,则可能不会产生预期的结果。引号内不会替换选项卡。
--close-templates / -xy
关闭模板定义的结束尖括号之间的空格。现在,C++11 标准允许关闭结尾尖括号。在进行更改之前,请确保您的编译器支持此功能。
Stack< int, List< int > > stack1;
成为:
Stack< int, List< int >> stack1;
--remove-comment-prefix / -xp
删除以一行开头的多行注释中的前面”*“。如果存在尾随的”*“,也会被删除。缩进量小于一个缩进的文本将缩进到一个缩进。大于一个缩进的文本不会更改。开始一行但没有前面”*“的多行注释将缩进到一个缩进以保持一致性。这可以稍微修改注释掉的代码块的缩进。包含所有”*“的行保持不变。从注释结尾”*/”中删除了多余的间距。
<pre><em>/*
* comment line 1
*comment line 2
*/</em></pre>
成为:
<pre><em>/*
comment line 1
comment line 2
*/</em></pre>
--max-code-length=<span class="option">#</span> / -xC<span class="option">#</span><br/>--break-after-logical / -xL
如果代码超过 # 个字符,则选项 max-code-length 将换行。有效值为 50 到 200。没有逻辑条件的行将在逻辑条件(||,&&,…),逗号,paren,分号或空格上断开。
某些代码不会被破坏,例如注释、引号和数组。如果与保留一行块或添加一行大括号一起使用,则块不会被破坏。如果与 keep-one-line-语句一起使用,则当行超过最大长度时,语句将以分号分隔。如果最大代码长度内没有可用的断点,则该行将在最大代码长度之后的第一个可用断点处断开。
默认情况下,逻辑条件将放在新行的第一位。” 逻辑后中断 “选项将导致逻辑条件放在前一行的最后一行。如果没有最大代码长度,此选项将不起作用。
if (thisVariable1 == thatVariable1 || thisVariable2 == thatVariable2 || thisVariable3 == thatVariable3)
bar();
成为:
if (thisVariable1 == thatVariable1
|| thisVariable2 == thatVariable2
|| thisVariable3 == thatVariable3)
bar();
变为(逻辑后中断):
if (thisVariable1 == thatVariable1 ||
thisVariable2 == thatVariable2 ||
thisVariable3 == thatVariable3)
bar();
--mode=c
--mode=cs
--mode=java
缩进 C 类型、C# 或 Java 文件。C类型文件是C,C++,C++ / CLI和Objective-C。该选项通常从每个文件的文件扩展名设置。您可以使用此条目覆盖该设置。它将用于所有文件,无论文件扩展名如何。它允许格式化程序识别特定于语言的语法,例如C++类、模板和关键字。
其他选项
这些是可用于命令行的非格式设置选项。它们也可以包含在选项文件中。
--suffix=<span class="option">####</span>
将后缀 #### 而不是”.orig”附加到原始文件名(例如 –sendix=.bak。如果这是文件扩展名,则必须包含点”.”。否则,后缀将附加到当前文件扩展名。
--suffix=none / -n
不要保留原始文件的备份。格式化后将清除原始文件。
--recursive / -r / -R
对于命令行中的每个目录,以递归方式处理所有子目录。使用递归选项时,文件名语句应包含通配符。Linux 用户应将文件路径和名称放在双引号中,以便 shell 不会解析通配符(例如”$HOME/src/*.cpp”)。如果路径或名称包含空格,则 Windows 用户应将文件路径和名称放在双引号中。
--dry-run
执行试运行,而不对文件进行任何更改。报告将照常输出。
--exclude=<span class="option">####</span>
指定要从处理中排除的文件或子目录 ####。
从文件路径的末尾匹配排除项。”模板”的排除选项将排除所有名为”模板”的目录。”cpp/templates”的排除选项将排除所有”cpp/templates”目录。您可以在目录树中向后继续操作,以仅排除所需的目录。
可以以相同的方式排除特定文件。”默认.cpp”的排除选项将排除所有名为”默认.cpp”的文件。”python/default.cpp”的排除选项将排除”python”子目录中所有名为”default.cpp”的文件。您可以在目录树中向后继续,以仅排除所需的文件。
不允许使用通配符。可能有多个排除语句。文件路径和名称可以放在双引号中(例如 –exclude=”foo bar.cpp”)。
--ignore-exclude-errors / -i
如果”排除=#”选项中存在错误,则允许继续处理。此选项允许在单个选项文件中输入多个项目的排除项。此选项可以放在与排除项相同的选项文件中。它将显示不匹配的排除项。以下选项将不会显示不匹配的排除项。
--ignore-exclude-errors-x / -xi
如果”排除=#”选项中存在错误,则允许继续处理。此选项允许在单个选项文件中输入多个项目的排除项。此选项可以放在与排除项相同的选项文件中。它不会显示不匹配的排除项。前面的选项将显示不匹配的排除项。
--errors-to-stdout / -X
将错误打印到标准输出,而不是标准错误。此选项对于没有单独输出到标准错误的系统/shell(如 Windows95 中)应该很有帮助。
--preserve-date / -Z
保留原始文件的修改日期和时间。修改的时间将更改几微秒,以强制编译更改后的文件。如果使用重定向重命名输入文件,则此选项无效。
--verbose / -v
详细显示模式。显示可选信息,如版本号、日期、选项文件位置和统计数据。
--formatted / -Q
格式化文件显示模式。仅显示已格式化的文件。不显示未更改的文件。
--quiet / -q
静音显示模式。禁止显示除错误消息之外的所有输出。
--lineend=windows / -z1<br/>--lineend=linux / -z2<br/>--lineend=macold / -z3
强制使用指定的线端样式。有效的选项是windows(CRLF),linux(LF)和macold(CR)。MacOld 样式是 Mac OS 9 及更早版本的格式。MacOS 和 OS X 使用 Linux 风格。如果未使用这些选项之一,则将从输入文件中自动确定行尾。
在 Windows 上使用重定向时,输出将始终具有 Windows 行的末尾。此选项将被忽略。
仅命令行
这些选项仅适用于命令行。它们在选项文件中不可用。
--options=<span class="option">####</span>
--options=none
指定要读取和使用的选项文件 ####。它必须包含文件路径和文件名。这将允许从 astylerc 或 .astylerc 更改文件名。
“无”选项将禁用默认选项文件(如果存在)。将仅使用命令行参数。
有关详细信息,请参阅选项文件部分。
--project
--project=<span class="option">####</span>
--project=none
指定要使用的项目选项文件。选项文件的默认名称应为 .astylerc 或 _astylerc并且应位于正在设置格式的项目的顶部目录中。
指定要使用的项目选项文件 ####。它必须仅包含不带目录路径的文件名。这将允许将项目文件名从 .astylerc 更改为 _astylerc。它应该位于正在格式化的项目的顶部目录中。
“无”选项将禁用项目选项文件(如果存在)。在这种情况下,将不使用项目选项文件。
有关详细信息,请参阅选项文件部分。
--ascii / -I
显示的输出将仅为 ASCII 字符。文本将以英文显示,并且不会设置数字格式。空头选项必须单独存在,不能与其他选项连接。
--version / -V
打印版本号并退出。空头选项必须单独存在,不能与其他选项连接。
--help / -h / -?
打印帮助消息并退出。空头选项必须单独存在,不能与其他选项连接。
--html / -!
在默认浏览器中打开 HTML 帮助文件”astyle.html”并退出。空头选项必须单独存在,不能与其他选项连接。文档必须安装在标准安装路径中(Linux 的/usr/share/doc/astyle/html 或 Windows 的 %PROGRAMFILES%\AStyle\doc)。如果安装到其他路径,请使用 html=###。
--html=<span class="option">####</span>
使用文件路径 #### 在默认浏览器中打开 HTML 帮助文件并退出。可以指定”astyle.help”以外的 HTML 文件。该路径可以包括目录路径和文件名,也可以仅包括文件名(例如.html=install.html)。如果仅使用文件名,则假定它位于标准安装路径中(Linux 为/usr/share/doc/astyle/html,Windows 为 %PROGRAMFILES%\AStyle\doc)。在这两种情况下,文件名都必须包含 html 扩展名。包含空格的文件路径必须用引号引起来。
在 Linux 上,HTML 文件使用安装包”xdg-utils”中的脚本”xdg-open”打开。默认情况下,这应该安装在大多数发行版上。
任何 HTML 文件都可以通过此选项打开。您可能需要的文件包括 astyle.html(默认值)、install.html和 index.html。
--stdin=<span class="option">####</span>
使用文件路径 #### 作为单个文件格式的输入打开文件。这是重定向的替代。不要将其与”<”重定向一起使用。
--stdout=<span class="option">####</span>
使用文件路径 #### 作为单个文件格式的输出打开文件。这是重定向的替代。不要将其与”>”重定向一起使用。
实例
递归格式化当前目录下的以.c,.cc,.cpp,.hpp,.h结尾的文件
astyle -A3 -s4 -w -xn -xc -xl -Y -f -xg -p -j -c -k1 -z2 -n –recursive “./.c,.cc,.cpp,.hpp,*.h”
配置其它IDE使用
KEIL
VSCode
- 下载astyle(windows需添加环境变量)
- vscode安装astyle插件
- 在setting.json文件中添加配置
"C_Cpp.formatting": "Disabled", //关闭C/C++插件的格式化
"astyle.additional_languages": [
"c" ,
"cpp" ,
],
"astyle.cmd_options": [
"-A3",
"-s4",
"-w",
"-xn",
"-xc",
"-xl",
"-Y",
"-f",
"-xg",
"-p",
"-j",
"-c",
"-k1",
"-z2",
"-n"
],