专业程序员与业余程序员之分主要在于一种态度,什么态度?专业态度。作为程序员,每当写下一行代时,要记得程序首先是给人读的,其次才是给机器读的。在日常的编码当中,大家经常要遵照一些设计规范,如命名规则、代码格式规范等等。每个人都有自己的代码书写风格,这对于团队来说是一件糟糕的事,不便于规范代码和阅读,所以一个合适的代码格式规范是必须的。今天介绍一款名为AStyle的代码格式化工具,Astyle是一个开源代码格式化工具,可以使大家在日常开发中非常方便的调整代码格式。AStyle是一款适用于C,C、C#、Java和Objective‑C源代码的免费,快速,小型自动格式化程序。
命令行格式:
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=#### 指定要从处理中排除的文件或子目录####。
把下面脚本放到源代码根目录即可格式化该目录以及子目录所有源文件。
REM 批量将本目录中的所有C文件用Astyle进行代码美化操作REM 设置Astyle命令位置和参数@echo offset astyle="D:\AStyle_3.1_windows\AStyle\bin\AStyle.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
联系客服