1.1 进入网址https://sourceforge.net/projects/astyle/files/latest/download,下载最新版本AStyle。
1.2 解压压缩包到MDK安装目录
2.1 Tools -> CustomizeTools Menu...
2.2 点击Menu Content后的虚线框按钮(New (Insert))
输入新建的菜单名:格式化本文件
指定AStyle.exe的路径
指定参数 !E
同样方式再新建一个菜单项(格式化所有文件):
注:!E 表示的是当前获得焦点且正在编辑的文件。
$E*.c和$E*.h代表当前获得焦点且正在编辑文件所在目录下所有.c和.h文件(参考keil uVision的帮助文档)
使用的是Astyle默认格式来格式化文件,另外也可以自定义格式,自定义格式参考Astyle的帮助文档。默认格式化后,会备份原文件为源文件名.orig。如果不想让Astyle备份文件,可以使用-n参数。如:-n !E (表示格式化当前文件,不备份)
打开待转换文件
点击菜单即可
自动转换。
根据spacety编程规范,使用以下参数进行格式化
格式化本文档,复制以下文本设置
!E -A1 -s4 -xk -xV -xc -S -xW -Y -f -p -xg -U -xe -k1 -W3
格式化整个文件夹文档,复制以下文本设置
"$E*.c" "$E*.h" -A1 -s4 -xk -xV -xc -S -xW -Y -f -p -xg -U -xe -k1 -W3
以下是符合spacety编程规范的参数的解释,其他参数参参考《5.参考文档》
--style=allman / --style=bsd / --style=break / -A1
该参数指定大括号左边单独成一行对齐,即
if (input.interface == if_a) {
ifout = if_b;
} else {
ifout = if_a;
}
变为
if (input.interface == if_a)
{
ifout = if_b;
}
else
{
ifout = if_a;
}
-s4 / --indent=spaces=4
默认即TAB为上述参数设置,即TAB为4个空格。
if (input.interface == if_a)
{
ifout = if_b;
}
else
{
ifout = if_a;
}
变为
if (input.interface == if_a)
{
ifout = if_b;
}
else
{
ifout = if_a;
}
--attach-extern-c / -xk
设置该参数后extern "C" { 语句最后的{}不单独成行。优先于4.1的设置。
正常模式如下
extern "C" {
按照1设置后会变为
extern "C" {
extern "C" {
--attach-closing-while / -xV
设置该参数后while语句最后的}不单独成行。优先于4.1的设置。
do
{
}
while(x == 1);
变为
do
{
}while(x == 1);
--attach-classes / -xc
设置该参数后结构体语句后的{不单独成行。优先于4.1的设置。
总是如下:
class FooClass {
...};
--indent-switches / -S
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-preproc-block / -xW
设置该参数,条件编译会缩进
becomes:
--indent-col1-comments / -Y
设置该参数,注释与代码对齐
void Foo()\n"{// comment
if (isFoo)
bar();}
becomes:
void Foo()\n"{
// comment
if (isFoo)
bar();}
--break-blocks / -f
设置该参数会在块之间加空行
isFoo = true;
if (isFoo) {
bar();} else {
anotherBar();}
isBar = false;
becomes:
isFoo = true;
if (isFoo) {
bar();} else {
anotherBar();}
isBar = false;
--pad-oper / -p
设置该参数会在操作符前后空格
isFoo = true;
if (isFoo) {
bar();} else {
anotherBar();}
isBar = false;
becomes:
isFoo = true;
if (isFoo) {
bar();} else {
anotherBar();}
isBar = false;
--pad-comma / -xg
设置该参数在逗号加空格
if (isFoo(a,b))
bar(a,b);
becomes:
if (isFoo(a, b))
b);
--unpad-paren / -U
设置该参数会删除不必要的空格
if ( isFoo( ( a+2 ), b ) )
bar ( a, b );
becomes (with no padding option requested):
if(isFoo((a+2), b))
bar(a, b);
--delete-empty-lines / -xe
设置该参数会删除不必要的空行
void Foo(){
foo1 = 1;
foo2 = 2;
}
becomes:
void Foo(){
foo1 = 1;
foo2 = 2;}
--align-pointer=type / -k1
设置该参数指针符号* 与类型靠紧
char* foo1;
char & foo2;
string ^s1;
becomes (with align-pointer=type):
char* foo1;
char& foo2;
string^ s1;
--align-reference=name / -W3
设置该参数引用符号& 与变量名靠紧
char& foo3;
becomes(with align-reference=name):
char &foo3;
《软件目录/doc/astyle.html》