代碼格式化工具 Astyle


常用的C/C++代碼格式優化工具有兩個,一是老牌的indent,再一個就是astyle了。

astyle不但可以對C/C++進行格式優化,還可以處理Java和C#。版本一直在保持更新,很不容易,截止2011-12-02,已經升級到V2.02.1。
通過命令““astyle -V”可以查詢版本信息,最新版本的源代碼和可執行文件可以在此處【下載】。

 

網絡上已經有很多博客介紹過astyle,如《在VS 2008中使用astyle代碼格式化工具》。
不過介紹中對astyle的參數存在些許偏差,可能是版本升級后參數發生了變化。
通過命令“astyle --help”可以獲取所有參數的介紹(幫助信息里還有錯字呢,有興趣大家可以找找看)。

下面的命令可以一次性格式化某個目錄下所有的源文件和頭文件,非常好用,標記一下。
for /R %f in (*.cpp;*.c;*.h) do astyle --style=ansi  "%f"

基於V2.02版本,astyle主要支持的參數有:

Style-格式配置:
最常用的就是ansi或或kr格式,實際上,kr,stroustrup和linux這三種格式是非常接近的了,試了好幾個文件,只有非常微小的區別,可以忽略不計。

stype
選項

--style=allman
--style=ansi
--style=bsd
--style=break
-A1

--style=java
--style=attach
-A2

--style=kr
--style=k&r
--style=k/r
-A3

--style=stroustrup
-A4

--style=whitesmith
-A5

--style=banner
-A6

代碼風格

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

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

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

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

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

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

stype
選項

--style=gnu
-A7

--style=linux
-A8

--style=horstmann
-A9

--style=1tbs
-A10

--style=pico
-A11

--style=lisp
-A12

代碼風格

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

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

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

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

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

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

 

其他常用的參數:

 

-C

類中public,pretected,private關鍵字,一個tab的縮進

-S

switch中case關鍵字,一個tab的縮進

-K

switch中case關鍵字,無縮進

-N

被namespace包含的block,一個tab的縮進

-w

格式化多行的宏定義

-c

將tab轉化為對應個數的空格

--mode=c

格式化的是C/C++的源文件或者頭文件(缺省值)

--mode=java

格式化的是JAVA的源文件

--suffix=####

將原始文件保存為“####”后綴,而不是“orig”

--suffix=none

不保存原始文件

--exclude=####

優化時不包含“####”文件或目錄

-Z

修改后保持文件的修改時間不變

-X

將錯誤信息輸出到標准輸出設備(stdout),而不是標准錯誤設備(stderr)

-Q

只顯示格式化前后發生變化的文件

-q

不輸出任何信息

-z1

使用windows版本的回車符(CRLF)

-z2

使用linux版本的回車符(LF)

--help

顯示幫助信息

-v

顯示版本信息

ref: http://www.cppblog.com/jerryma/archive/2012/02/02/164813.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM