超級好用的代碼格式化工具AStyle(附帶腳本)

代碼格式化工具AStyle

專業程序員與業餘程序員之分主要在於一種態度,什麼態度?

專業態度。作為程序員,每當寫下一行代時,要記得程序首先是給人讀的,其次才是給機器讀的。在日常的編碼當中,大家經常要遵照一些設計規範,如命名規則、代碼格式規範等等。每個人都有自己的代碼書寫風格,這對於團隊來說是一件糟糕的事,不便於規範代碼和閱讀,所以一個合適的代碼格式規範是必須的。今天介紹一款名為AStyle的代碼格式化工具,Astyle是一個開源代碼格式化工具,可以使大家在日常開發中非常方便的調整代碼格式。AStyle是一款適用於C,C、C#、Java和Objective‑C源代碼的免費,快速,小型自動格式化程序。

AStyle工具主要參數介紹

命令行格式:

<code>astyle [選項]  SourceFilePath1 SourceFilePath2 SourceFilePath3 [。。。]/<code>

不指定任何選項將導致默認的花括號樣式,每個縮進4個空格以及格式無變化。AStyle程序遵循通常的GNU命令行語法。選項可以用兩種不同的方式編寫。

長選項

這些選項以“ - ” 開頭,並且必須一次寫入一個(例如:'-style=allman --indent=spaces = 4')。

短選項

這些選項以單個“ - ” 開頭,並且可以串聯在一起(例如:“-bps4”與編寫“ -b -p -s4”相同。)。

--indent-switches/-S 縮進case標籤

<code>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;
}
}/<code>

--indent=spaces=4/-s4 縮進4個空格

<code>void Foo() {
....if (isBar1
............&& isBar2)

........bar();
}/<code>

--indent-namespaces/-N 縮進命名空間塊

<code>namespace foospace
{
class Foo
{
public:
Foo();
virtual ~Foo();
};
}
becomes:
namespace foospace
{
class Foo
{
public:
Foo();
virtual ~Foo();
};
}/<code>

--style=ansi 大括號獨佔一行,上下對齊

<code>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;

}/<code>

--attach-closing-while/-xV (while緊貼)

<code>do
{
bar();
++x;
}
while x == 1;
becomes:
do
{
bar();
++x;
} while x == 1/<code>

--indent-preproc-block/-xW 縮進#開頭的處理語句

<code>#ifdef _WIN32
#include <windows.h>
#ifndef NO_EXPORT
#define EXPORT
#endif
#endif
becomes:
#ifdef _WIN32
#include <windows.h>
#ifndef NO_EXPORT
#define EXPORT
#endif
#endif/<windows.h>/<windows.h>/<code>

--indent-preproc-cond/-xw 將預處理器條件語句縮進到與源代碼相同的級別


<code>        isFoo = true;
#ifdef UNICODE
text = wideBuff;

#else
text = buff;
#endif
becomes:
\t\t\t\tisFoo = true;
#ifdef UNICODE
text = wideBuff;
#else
text = buff;
#endif/<code>

--indent-col1-comments/-Y 註釋也縮進

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

--pad-oper/-p 運算符周圍插入空格

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

--pad-paren-out/-d 僅在外部的括號周圍插入空格填充

<code>if (isFoo((a+2), b))
bar(a, b);
becomes:
if (isFoo ( (a+2), b) )
bar (a, b);/<code>

--pad-header/-H 在標頭(例如“ if”,“ for”,“ while” ...)和後面的括號之間插入空格

<code>if(isFoo((a+2), b))
bar(a, b);
becomes:
if (isFoo((a+2), b))
bar(a, b);/<code>

--unpad-paren/-U 除去內部和外部的括號周圍的多餘空間。

<code>if ( isFoo( ( a+2 ), b ) )
bar ( a, b );
becomes:
if(isFoo((a+2), b))
bar(a, b);/<code>

--align-pointer=name/-k3 指針符號緊貼名字

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

--max-code-length=#/-xC# 代碼行最大長度

--break-after-logical/-xL 默認情況下,邏輯條件將放在新行的第一位。選項“ 邏輯後中斷”將使邏輯條件置於最後一行的最後。沒有最大代碼長度,此選項無效。

<code>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();/<code>

--attach-return-type/-xf 返回類型緊貼符號名

--attach-return-type-decl/-xh 返回類型緊貼符號名(函數聲明)

<code>void
Foo(bool isFoo);
becomes:
void Foo(bool isFoo);/<code>

--add-braces/-j 在'if', 'for', 'while'等句塊中只有一行也加入大括號

<code>if (isFoo)
isFoo = false;
becomes:
if (isFoo) {
isFoo = false;
}/<code>

--break-blocks/-f 在標題塊周圍填充空白行(例如“ if”,“ for”,“ while” ...)

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

if (isFoo) {
bar();
} else {
anotherBar();
}

isBar = false;/<code>

--convert-tabs/-c 將TAB符轉化成空格,由轉化參數指定,引號內的不轉化

--recursive/-r 對於命令行中的每個目錄,請遞歸處理所有子目錄

--suffix=none / -n 不要保留原始文件的備份。格式化後將清除原始文件

--exclude=#### 指定要從處理中排除的文件或子目錄####。

AStyle腳本工具

把下面腳本放到源代碼根目錄即可格式化該目錄以及子目錄所有源文件。

<code>REM 批量將本目錄中的所有C文件用Astyle進行代碼美化操作
REM 設置Astyle命令位置和參數
@echo off
set 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~4
REM --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/<code>


分享到:


相關文章: