代码格式化工具astyle的安装和使用

 

简介

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下需要自己下载源码,编译安装。

  1. 解压到指定目录
  2. 在终端下如下操作即可

    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

  1. 下载astyle(windows需添加环境变量)
  2. vscode安装astyle插件
  3. 在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"
    ],

参考链接

QT Creator

https://www.cnblogs.com/citrus/p/15122820.html