AStyle2.02在VS2008下的使用

来源:互联网 发布:icmp.dll被java嗲用 编辑:程序博客网 时间:2024/04/30 20:41

astyle是一个常用的开放源码工具。它可以方便的将程序代码格式化成自己想要的样式而不必人工修改。本来嘛,作为高等生物应该优先去做一些智慧的事情,而不是把时间消耗在机器可以完美完成的事情上。

想要立刻开始?请先去主页http://sourceforge.net/projects/astyle下载最新版本。可以选择二进制版本,也可以下载源码自行编译。总之得到可执行文件后请将astyle放在Path(C:\Program Files\Microsoft Visual Studio 8\Common7\IDE)中,这样会方便很多。

astyle是一个命令行工具,命令语法很简单:
          astyle [options] < original > Beautified
          astyle [options] Foo.cpp Bar.cpp  [...]

例如:

          astyle --style=ansi foo.cpp

上面的命令将美化foo.cpp文件,更改其风格为ANSI,并将原始文件备份到foo.cpp.orgin。所以,你可以安全的使用该软件而不必担心会将代码改得无法回头。

具体的来说,astyle包含了以下几种预定义风格,只需在参数中简单指定即可使用:

  --style=ansi:ANSI 风格格式和缩进

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


  --style=kr :Kernighan&Ritchie 风格格式和缩进

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


  --style=linux :Linux 风格格式和缩进

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


  --style=gnu :GNU 风格格式和缩进

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


  --style=java :Java 风格格式和缩进

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

从这里开始介绍astyle的高级应用!这里要介绍的是两种应用情形,一是在Visual Studio中整合,二是批量处理。

先看如何在Visual Studio中整合。看图说话!

第一步:点击“工具”菜单

第二步:点击“外部工具”

第三步:配置并保存

在对话框中点击“添加”,如图填入各项。其中参数填写 --style=ansi $(ItemFileName)$(ItemExt)

可以勾选“使用输出窗口”,这样将不会显示黑色的命令窗口。相关信息都会显示在Visual Studio中。

在VS 2008中使用astyle代码格式化工具 - 晓磊 - 晓磊的网上家园

经过上面设置之后,只需点击该菜单项就可以将当前文档格式化成ansi风格。如果你想要其它风格,可以自行设置参数。

值得注意的是在低版本的Visual Studio中,默认设置运行外部程序不会保存当前文档。这样的话如果在未保存的情况下运行该命令,未保存部分将会丢失。这个可以通过设置一个选项来解决。Visual Studio 6.0中:Options -> Editor -> Save Options -> Save before running tools 将该项勾选即可。我已经验证,在Visual Studio 2005中不用担心这类问题,可以放心使用。但是作为一个好习惯,我仍然建议你随时保存你的工作,尤其是做这种大幅度改动之前,甚至应该对源代码进行Check in操作。不知道Check in是什么?没关系,过几天我还会写一篇关于代码控制的文章,应该可以解决你的疑惑。

1.常用功能
(1) 单个文件--缺省美化
astyle --style=ansi Form1.cs
处理前的代码:
    private void Form1_Load(object sender, EventArgs e)
    {
        int s;
        for (int i=0;i<10;i++){
            for (int j=0;j<10; j++){
                s = s+j+i;}
        }
    }
处理后:
    private void Form1_Load(object sender, EventArgs e)
    {
        int s;
        for (int i=0;i<10;i++)
        {
            for (int j=0;j<10; j++)
            {
                s = s+j+i;
            }
        }
    }

(2) 单个文件--更改缩进2个空格
astyle --style=ansi --indent=spaces=2 Form1.cs
缺省缩进一个TAB,也可以显式说明使用Tab,如下:
astyle --style=ansi --indent=tab Form1.cs

(3) 处理多个文件--有限个
astyle --style=ansi Form1.cs Form2.cs

(4) 批量处理多个文件--无限个
for /R .\ %f in (*.cs) do astyle --style=ansi "%f"
说明:/R表明遍历一个目录树,后面紧跟的路径是根,缺省为当前目录。
本例中,根为.\表示当前目录,命令等价于:
for /R %f in (*.cs) do astyle --style=ansi "%f"
作用是从(目录树根)当前目录开始,查找所有java文件,包含子目录中的文件;然后交给astyle处理。
当然,目录树根也可以使用绝对路径,下面的命令查找C盘所有的java文件并处理。
for /R c:\ %f in (*.cs) do astyle --style=ansi "%f"

2. 其他比较有用的开关:(均在--style之前写)
(1) -f
在两行不相关的代码之间插入空行,如import和public class之间、public class和成员之间等;
(2) -p
在操作符两边插入空格,如=、+、-等。
如:int a=10*60;
处理后变成int a = 10 * 60;
(3) -P
在括号两边插入空格。另,-d只在括号外面插入空格,-D只在里面插入。
如:MessageBox.Show ("aaa");
处理后变成MessageBox.Show ( "aaa" );
(4) -U
移除括号两边不必要的空格。
如:MessageBox.Show ( "aaa" );
处理后变成MessageBox.Show ("aaa");
(5) -V
将Tab替换为空格。

下面再介绍第二项独门绝技:批量格式化!

有时候你会有很多文件需要格式化成统一风格,难道一个个点击菜单?不!那样太累了。

在Windows中,我们可以用命令行来解决问题。这里用到一个超级命令 for

我来写个范例,大家就知道该怎么处理了。

      for /R %f in (*.cpp;*.c;*.h) do astyle --style=ansi "%f"

该命令在当前目录中寻找文件名匹配模式 *.cpp;*.c;*.h 的所有文件(不同模式可用英文逗号隔开),并且对每个文件%f执行操作:

       astyle --style=ansi "%f"

原帖地址:http://blog.csdn.net/memory_xj/archive/2008/09/26/2983093.aspx





 AStyle(全称Artistic Style)是一个C、C++、C#和Java源代码缩进、格式化和美化工具。官方下载是命令行版程序,可以整合到开发IDE环境中去使用,甚至也可以整合到Notepad++之类的编辑器中。

官方地址:http://astyle.sourceforge.net/
本地下载:http://download.csdn.net/source/3323725

     在这里介绍AStyle整合到VS2008的方法,以及如何使用。
1.首先下载AStyle,将其bin文件夹下的"AStyle.exe"解压到"D:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools"文件夹下,具体路径根据所安装的VS路径进行更改,这是专门放置Visual Studio外部工具的文件夹;
2.打开Visual Studio 2008,在菜单栏→"工具"→"外部工具",点击"添加",在下面的编辑框里分别填入信息:

标题:AStyle格式化工具
命令:D:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools/AStyle.exe
参数:-A1pNYk3 $(ItemFileName)$(ItemExt)
初始化目录:$(ItemDir)
√使用输出窗口


3.就可以在"工具"菜单栏下看到"AStyle格式化工具"选项了,要格式化文档前,先保存文档再调用"AStyle格式化工具"选项,这时,会弹出"是否要重新加载它"的询问框,可在"工具"→"选项"→"环境"→"文档"→"自动加载更改"打钩。

4.要为"AStyle格式化工具"选项设置快捷键的话,在"工具"菜单上选择"选项",从"环境"页中选择"键盘",在"显示命令包含"列表中键入"工具",在"命令名"列表中滚动到相应的"外部命令 n"项。在这里我是第9个外部命令项,所以找到"工具.外部命令9",在"按快捷键"处,键入要设置的快捷键,点击"分配"。如下图所示:


AStyle参数如下:
①Ansi/Allman/Bsd风格(格式缩进从下一行开始括号)

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

②Java风格(格式缩进直接紧接后面括号)

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

③Kernighan_Ritchie风格(格式缩进使用Linux方式括号)

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

④Stroustrup风格(格式缩进使用stroustrup方式括号,缩进使用5个空格)

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

⑤Whitesmith风格(格式缩进使用下一行且缩进的括号)

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

⑥Banner风格(格式缩进使用直接紧接和缩进的括号)

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

⑦GNU风格(格式缩进使用下一行括号,语句块括号缩进两个空格)

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

⑧Linux风格(格式缩进使用Linux方式括号,语句块里面缩进8个空格)

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

⑨Horstmann风格(格式缩进使用horstman方式,括号紧接语句块)

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

⑩1tbs/otbs风格(格式缩进使用Linux方式括号,自动补全单行语句块括号)

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

⑾pico风格

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

⑿lisp/python风格

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

也可以自定义格式化参数:

        ①制表和括号选项

参数命令参数说明default indent option默认4个空格--indent=spaces / --indent=spaces=# / -s#指定#个空格,#在1~20之间--indent=tab / --indent=tab=# / -t#使用制表符,指定#个空格(1~20)--indent=force-tab / --indent=force-tab=# / -T# 强制使用制表符,指定#个空格,#在1~20之间default brackets option默认不改变括号--brackets=break / -b括号改为下行( e.g. ANSI C / C++ style )--brackets=attach / -a括号在语句后( e.g. Java / K&R style )--brackets=linux / -l括号如linux风格--brackets=stroustrup / -u括号如stroustrup风格--brackets=horstmann / -g括号如horstmann 风格

      ②缩进选项

参数命令参数说明--indent-classes / -C缩进class和struct块后面的public等--indent-switches / -S缩进switch块后面的case块--indent-cases / -K缩进case块后面的括号--indent-brackets / -B括号缩进--indent-blocks / -G括号缩进,函数缩进--indent-namespaces / -N命名空间后缩进--indent-labels / -L额外的标签缩进--indent-preprocessor / -w多行反斜杠定义缩进--indent-col1-comments / -Y允许注释跟随代码一起缩进--max-instatement-indent=# / -M#在连续声明中缩进最大#个空格(#小于80,默认为40)--min-conditional-indent=# / -m#在多行中设置最小缩进(#小于40,默认为当前两倍缩进)

      ③填充选项

参数命令参数说明--break-blocks / -f在循环语句前后加空行--break-blocks=all / -F在循环语句前后、else、catch前加空行--pad-oper / -p运算符前后加空格--pad-paren / -P 在括号内外都加上空格--pad-paren-out / -d 在括号外加上空格--pad-paren-in / -D 在括号内加上空格--pad-header / -H 只在括弧头部添加一个空格--unpad-paren / -U 移除括号内外的空格--delete-empty-lines / -x删除函数方法里多余的空行--fill-empty-lines / -E 以空格对齐填充前一行空行

      ④格式化选项

参数命令参数说明--break-closing-brackets / -y 让else语句块下起一行--break-elseifs / -e让else if 语句拆开缩进--add-brackets / -j自动补充括号,默认在条件语句后紧接括号--add-one-line-brackets / -J自动补充括号,并且保持括号与语句在一行--keep-one-line-statements / -o 维持一行里的多条语句不变--keep-one-line-blocks / -O不破坏一行里面的块--convert-tabs / -c转换TAB 为空格--align-pointer=type / -k1
--align-pointer=middle / -k2 
--align-pointer=name / -k3使指针或者引用符靠近变量类型
使指针或者引用符在变量类型和变量名称中间
使指针或者引用符靠近变量名称--mode=c
--mode=cs
--mode=java指定为C/C++代码格式化
指定为C#代码格式化
指定为JAVA 代码格式化参数命令样式,请参考Artistic Style 说明文档:http://astyle.sourceforge.net/astyle.html
0 0