MDK使用AStyle进行代码自动格式化

描述

本文转自公众号,欢迎关注
https://mp.weixin.qq.com/s/uzaGLFTDBAn8wyR84yaiIw

1. 下载软件

1.1 进入网址https://sourceforge.net/projects/astyle/files/latest/download,下载最新版本AStyle。

代码

1.2 解压压缩包到MDK安装目录

代码

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 (表示格式化当前文件,不备份)

3. 使用

打开待转换文件

点击菜单即可

代码

自动转换。

4. 符合spacety编程规范的格式化参数

根据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.参考文档》

4.1 大括号

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

4.2 TAB和空格

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

4.3 头文件的extern c申明

--attach-extern-c / -xk

设置该参数后extern "C" { 语句最后的{}不单独成行。优先于4.1的设置。

正常模式如下

#ifdef __cplusplus
 extern "C" {
#endif

按照1设置后会变为

#ifdef __cplusplus
 extern "C" {
#endif
#ifdef __cplusplus
 extern "C" {
#endif

4.4 while语句

--attach-closing-while / -xV

设置该参数后while语句最后的}不单独成行。优先于4.1的设置。

do
{
}
while(x == 1);

变为

do
{
}while(x == 1);

4.5 结构体/类

--attach-classes / -xc

设置该参数后结构体语句后的{不单独成行。优先于4.1的设置。

总是如下:

class FooClass {
...};

4.5 Switch语句

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

4.6 条件编译

--indent-preproc-block / -xW

设置该参数,条件编译会缩进

#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

4.8 注释对齐

--indent-col1-comments / -Y

设置该参数,注释与代码对齐

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

4.9 空行

--break-blocks / -f

设置该参数会在块之间加空行

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

4.10 操作符空格

--pad-oper / -p

设置该参数会在操作符前后空格

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

4.11 逗号空格

--pad-comma / -xg

设置该参数在逗号加空格

if (isFoo(a,b))
    bar(a,b);
becomes:
if (isFoo(a, b))
    bar(a, b);

4.12 删除不必要空格

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

4.13 删除空行

--delete-empty-lines / -xe

设置该参数会删除不必要的空行

void Foo(){
​
    foo1 = 1;
​
    foo2 = 2;
}
becomes:
void Foo(){
    foo1 = 1;
    foo2 = 2;}

4.14 指针

--align-pointer=type / -k1

设置该参数指针符号* 与类型靠紧

char* foo1;
char & foo2;
string ^s1;
becomes (with align-pointer=type):
char* foo1;
char& foo2;
string^ s1;

4.15 引用

--align-reference=name / -W3

设置该参数引用符号& 与变量名靠紧

char& foo3;
becomes(with align-reference=name):
char &foo3;

5. 参考文档

《软件目录/doc/astyle.html》

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分