超级好用的代码格式化工具AStyle(附带脚本)

代码格式化工具AStyle

专业程序员与业余程序员之分主要在于一种态度,什么态度?专业态度。作为程序员,每当写下一行代时,要记得程序首先是给人读的,其次才是给机器读的。在日常的编码当中,大家经常要遵照一些设计规范,如命名规则、代码格式规范等等。每个人都有自己的代码书写风格,这对于团队来说是一件糟糕的事,不便于规范代码和阅读,所以一个合适的代码格式规范是必须的。今天介绍一款名为AStyle的代码格式化工具,Astyle是一个开源代码格式化工具,可以使大家在日常开发中非常方便的调整代码格式。AStyle是一款适用于C,C、C#、Java和Objective?C源代码的免费,快速,小型自动格式化程序。

AStyle工具主要参数介绍

命令行格式:

astyle [选项]   SourceFilePath1 SourceFilePath2 SourceFilePath3 [。。。]

不指定任何选项将导致默认的花括 样式,每个缩进4个空格以及格式无变化。AStyle程序遵循通常的GNU命令行语法。选项可以用两种不同的方式编写。

长选项

这些选项以“ ” 开头,并且必须一次写入一个(例如:’-style=allman –indent=spaces = 4’)。

短选项

这些选项以单个“ ” 开头,并且可以串联在一起(例如:“-bps4”与编写“ -b -p -s4”相同。)。

–indent-switches/-S 缩进case标签

switch (foo){case 1:    a += 1;    break;case 2:{    a += 2;    break;}}becomes:switch (foo){    case 1:        a += 1;        break;    case 2:    {        a += 2;        break;    }}

–indent=spaces=4/-s4 缩进4个空格

void Foo() {....if (isBar1............&& isBar2) ........bar();}

–indent-namespaces/-N 缩进命名空间块

namespace foospace{class Foo{    public:        Foo();        virtual ~Foo();};}becomes:namespace foospace{    class Foo    {        public:            Foo();            virtual ~Foo();    };}

–style=ansi 大括 独占一行,上下对齐

int Foo(bool isBar){    if (isBar) {        bar();        return 1;    } else        return 0;}becomes:int Foo(bool isBar){    if (isBar)    {        bar();        return 1;    }    else        return 0;}


–attach-closing-while/-xV (while紧贴)

do{    bar();    ++x;}while x == 1;becomes:do{    bar();    ++x;} while x == 1


–indent-preproc-block/-xW 缩进#开头的处理语句

#ifdef _WIN32#include <windows.h>#ifndef NO_EXPORT#define EXPORT#endif#endifbecomes:#ifdef _WIN32    #include <windows.h>    #ifndef NO_EXPORT        #define EXPORT    #endif#endif

–indent-preproc-cond/-xw 将预处理器条件语句缩进到与源代码相同的级别

        isFoo = true;#ifdef UNICODE        text = wideBuff;#else        text = buff;#endifbecomes:				isFoo = true;        #ifdef UNICODE        text = wideBuff;        #else        text = buff;        #endif

–indent-col1-comments/-Y 注释也缩进

void Foo()n"{// comment    if (isFoo)        bar();}becomes:void Foo()n"{    // comment    if (isFoo)        bar();}

–pad-oper/-p 运算符周围插入空格

if (foo==2)    a=bar((b-c)*a,d--);becomes:if (foo == 2)    a = bar((b - c) * a, d--);

–pad-paren-out/-d 仅在外部的括 周围插入空格填充

if (isFoo((a+2), b))    bar(a, b);becomes:if (isFoo ( (a+2), b) )    bar (a, b);

–pad-header/-H 在标头(例如“ if”,“ for”,“ while” …)和后面的括 之间插入空格

if(isFoo((a+2), b))    bar(a, b);becomes:if (isFoo((a+2), b))    bar(a, b);

-unpad-paren/-U 除去内部和外部的括 周围的多余空间。

if ( isFoo( ( a+2 ), b ) )    bar ( a, b );becomes:if(isFoo((a+2), b))    bar(a, b);

–align-pointer=name/-k3 指针符 紧贴名字

char* foo1;char & foo2;string ^s1;becomes (with align-pointer=name):char *foo1;char &foo2;string ^s1;

–max-code-length=#/-xC# 代码行最大长度

–break-after-logical/-xL 默认情况下,逻辑条件将放在新行的第一位。选项“ 逻辑后中断”将使逻辑条件置于最后一行的最后。没有最大代码长度,此选项无效。

if (thisVariable1 == thatVariable1 || thisVariable2 == thatVariable2 || thisVariable3 == thatVariable3)    bar();becomes:if (thisVariable1 == thatVariable1        || thisVariable2 == thatVariable2        || thisVariable3 == thatVariable3)    bar();becomes (with break?after?logical):if (thisVariable1 == thatVariable1 ||        thisVariable2 == thatVariable2 ||        thisVariable3 == thatVariable3)    bar();

–attach-return-type/-xf 返回类型紧贴符 名


–attach-return-type-decl/-xh 返回类型紧贴符 名(函数声明)

voidFoo(bool isFoo);becomes:void Foo(bool isFoo);

–add-braces/-j 在’if’, ‘for’, ‘while’等句块中只有一行也加入大括

if (isFoo)    isFoo = false;becomes:if (isFoo) {    isFoo = false;}

–break-blocks/-f 在标题块周围填充空白行(例如“ if”,“ for”,“ while” …)

isFoo = true;if (isFoo) {    bar();} else {    anotherBar();}isBar = false;becomes:isFoo = true;if (isFoo) {    bar();} else {    anotherBar();}isBar = false;

–convert-tabs/-c 将TAB符转化成空格,由转化参数指定,引 内的不转化

–recursive/-r 对于命令行中的每个目录,请递归处理所有子目录

–suffix=none / -n 不要保留原始文件的备份。格式化后将清除原始文件

–exclude=#### 指定要从处理中排除的文件或子目录####。

AStyle脚本工具

把下面脚本放到源代码根目录即可格式化该目录以及子目录所有源文件。

REM 批量将本目录中的所有C文件用Astyle进行代码美化操作REM 设置Astyle命令位置和参数@echo offset astyle="D:AStyle_3.1_windowsAStylebinAStyle.exe"REM --indent-switches/-S 缩进case标签REM --indent=spaces=4/-s4 缩进4个空格REM --indent-namespaces/-N 缩进命名空间块REM --indent-continuation=4/-xt4 结尾后续本语句符 插入空格,默认为1,可取1~4REM --style=ansi 大括 独占一行,上下对齐REM --attach-closing-while/-xV (while紧贴)REM --indent-preproc-block/-xW 缩进#开头的处理语句REM --indent-preproc-cond/-xw  将预处理器条件语句缩进到与源代码相同的级别REM --indent-col1-comments/-Y 注释也缩进REM --pad-oper/-p 运算符周围插入空格REM --pad-comma/-xg 逗 间插入空格(--pad-oper中已有此效果)REM --pad-paren/-P 在内部和外部的括 周围插入空格REM --pad-paren-out/-d 仅在外部的括 周围插入空格填充REM --pad-paren-in/-D 括 里内插入空格REM --pad-header/-H 在标头(例如“ if”,“ for”,“ while” ...)和后面的括 之间插入空格REM --unpad-paren/-U 除去内部和外部的括 周围的多余空间。此选项可以与paren填充选项,pad-paren,pad-paren-out,pad-paren-in和pad-header一起使用REM --align-pointer=name/-k3 指针符 紧贴名字REM --max-code-length=#/-xC#  代码行最大长度REM --break-after-logical/-xL 默认情况下,逻辑条件将放在新行的第一位。选项“ 逻辑后中断”将使逻辑条件置于最后一行的最后。没有最大代码长度,此选项无效REM --attach-return-type/-xf 返回类型紧贴符 名REM --attach-return-type-decl/-xh 返回类型紧贴符 名(函数声明)REM --add-braces/-j 在'if', 'for', 'while'等句块中只有一行也加入大括 REM --convert-tabs/-c 将TAB符转化成空格,由转化参数指定,引 内的不转化REM --recursive/-r 对于命令行中的每个目录,请递归处理所有子目录REM --break-blocks/-f 在标题块周围填充空白行(例如“ if”,“ for”,“ while” ...)REM --suffix=none / -n 不要保留原始文件的备份。格式化后将清除原始文件REM --exclude=#### 指定要从处理中排除的文件或子目录####。REM 循环遍历目录for /r . %%a in (*.cpp;*.c) do %astyle% --style=ansi -S -s4 -xV -xW  -xw -Y -p -xg -d -H -U -k3  -xC80 -xL -xf -xh -j -c -f "%%a"for /r . %%a in (*.hpp;*.h) do %astyle% --style=ansi -S -s4 -xV -xW  -xw -Y -p -xg -d -H -U -k3  -xC80 -xL -xf -xh -j -c -f "%%a"REM 删除所有的astyle生成文件for /r . %%a in (*.orig) do del "%%a"pause

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年11月26日
下一篇 2019年11月27日

相关推荐