打印
[其他]

自动调整代码格式——astyle详解

[复制链接]
1034|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mmbs|  楼主 | 2024-9-29 06:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1 AStyle简介

        以下是百度百科对Astyle的解释:

《Astyle是一个用来对C/C++代码进行格式化的 Eclipse 插件,可在 Eclipse CDT 环境中使用。该插件基于 Artistic Style 开发。可嵌入MDK,Source Insight,UE等软件使用》

1.1 为什么要使用Astyle工具

        当我们打开其他人编写的代码的时候,有强迫症的读者会去修改代码的格式,比如对齐、空行、条件语句后面增加空格等,如果工程很大,那么会花费我们巨大的人力时间,对工程及个人是很不友好的,所以代码格式调整工具就孕育而生了。

1.2 Astyle下载

        这里提供Astyle-v3.4-x64版本的下载文件,其他版本请到网上自行下载,这里不多介绍下载。这里以Astyle-v3.4-x64进行讲解。

        下载好了之后,我们打开doc文件夹的《astyle.html》文件,这个文件有对Astyle的所有解释,但是我们使用不到这么多,我们下面简单讲解一下常用的配置参数以及怎么在其他IDE工具上集成Astyle工具。

1.3 Astyle常用配置参数

        这里只是针对嵌入式C语言的代码的常用配置参数,其他编程语言的常用配置参数请自行参考doc文件夹的《astyle.html》文件进行修改。

Astyle常用命令参数
参数分类说明
-A1Brace Style Options每个括号都单独占一行,成对括号对齐,内容统一向后缩进
-s4Tab Options缩进4个空格
-xVBrace Modify Options将“do-while”语句的右“while”附加到右大括号。这优先于大括号样式和打断-闭合大括号选项。
-SIndentation Options缩进“switch”块,以便在switch块中缩进“case X:”语句。
-xWIndentation Options条件编译缩进
-YIndentation Options注释缩进
-M#Indentation Options设置缩进连续行的最大#个空格
-fPadding Options条件语句空行填充
-xgPadding Options逗号空格填充
-HPadding Options条件语句空格填充
-UPadding Options去除括号多余空格
-cFormatting Options将tab键替换成空格键
-nOther Options不保留原始数据备份

        常用命令参数:-A1 -s4 -xV -S -xW -Y -M120 -f -xg -H -U -c -n

1.4 Astyle常用配置参数详解1.4.1 -A参数(括号独占)详解

        括号使用-A1参数,该参数主要特点是:每个括号都单独占一行,成对括号对齐,内容统一向后缩进。

int Foo(bool isBar){    if (isBar)    {        bar();        return 1;    }    else        return 0;}
1.4.2 -s4参数(缩进4个空格)详解

        Tab键使用-s4参数,该参数特点是:缩进使用4个空格键。

void Foo() {....if (isBar1............&& isBar2)    // indent of this line can be changed with min-conditional-indent........bar();}
1.4.3 -xV参数(do-while括号)详解

        本条目只涉及到do...while参数,do..while缩进采用-xV参数,该参数特点为:将“do-while”语句的右“while”附加到右大括号。这优先于大括号样式和打断-闭合大括选项。

do{    bar();    ++x;}while x == 1;

becomes:

do{    bar();    ++x;} while x == 1;
1.4.4 -S参数(switch缩进)详解

        缩进“switch”块,以便在switch块中缩进“case X:”语句。整个案例块缩进。

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;    }}
1.4.5 -xW参数(条件编译缩进)详解

        在大括号级别0处缩进预处理器块,并立即在命名空间中缩进。缩进的内容有限制。方法、类、数组等中的块不会缩进。包含大括号或多行定义语句的块将不会缩进。如果没有此选项,预处理器块将不会缩进。

#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
1.4.6 -Y参数(注释缩进)详解

        从第一列开始缩进C++注释。默认情况下,从第一列开始的C++注释被认为是注释掉的代码,而不是缩进的。此选项将允许注释与代码一起缩进。

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

becomes:

void Foo()\n"{    // comment    if (isFoo)        bar();}
1.4.7 -M#参数(连续行最大空格缩进)详解

        设置缩进连续行的最大#个空格。#表示列数,且不得小于40或大于120。如果未设置任何值,则将使用默认值40。此选项将防止连续线向右延伸过远。设置更大的值将允许代码进一步向右扩展。

fooArray[] = { red,         green,         blue };fooFunction(barArg1,         barArg2,         barArg3);

becomes (with larger value):

fooArray[] = { red,               green,               blue };fooFunction(barArg1,            barArg2,            barArg3);
1.4.8 -f参数(条件语句空行填充)详解

        在条件语句"if"、"for"、"while"...等语句上下填充空行。

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

becomes:

isFoo = true;if (isFoo) {    bar();} else {    anotherBar();}isBar = false;
1.4.9 -xg参数(逗号空格填充)详解

        在逗号后插入空格填充。

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

becomes:

if (isFoo(a, b))    bar(a, b);
1.4.10 -H参数(条件语句空格填充)详解

        在条件语句"if"、"for"、"while"...等语句后插入空格。

if(isFoo((a+2), b))    bar(a, b);

becomes:

if (isFoo((a+2), b))    bar(a, b);
1.4.11 -U参数(去除括号多余空格)详解

        把括号中的多余空格去除。

if ( isFoo( ( a+2 ), b ) )    bar ( a, b );

becomes (with no padding option requested):

if(isFoo((a+2), b))    bar(a, b);

        -U参数不和条件语句空格填充(-H)冲突,比如设置了这两条指令,那么条件语句后面的空格也会保留。

if ( isFoo( ( a+2 ), b ) )    bar ( a, b );

becomes (with no padding option requested):

if (isFoo((a+2), b))    bar(a, b);
1.4.12 -c参数(tab转空格)详解

        此命令是将tab键转换成空格键,但是和-s4命令重复,也可以两个命令都加上,也可以只加上-s4命令或此命令。

1.4.13 -n参数(不保留原始数据备份)详解

        顾名思义,就是每次格式化之后的代码,修改前的文件不被保留。

2 Astyle在keil上的应用

        下载好的astyle3.4-x64.rar进行解压,找到《astyle.exe》文件,记住位置。

2.1 Astyle加载到keil工具栏中

        打开keil软件,选择tools-->Customize Tools Menu。

2.1.1 单个文件格式修改

        按下图操作,并填写常用命名参数:"!E" -A1 -s4 -xV -S -xW -Y -M120 -f -xg -H -U -c -n

注意:"!E",这里表示获得当前焦点且正在编辑的文件

2.1.2 批量文件格式修改

        按下图操作,并填写常用命名参数:"$E*.c" -A1 -s4 -xV -S -xW -Y -M120 -f -xg -H -U -c -n

注意:"$E*.c",表示查找当前文件所在的文件夹所有的*.c文件

        如果要修改*.h文件,相应的命令参数为:"$E*.h" -A1 -s4 -xV -S -xW -Y -M120 -f -xg -H -U -c -n

2.2 代码格式调整演示2.2.1 单个文件格式修改演示

        点击Tools-->astyle格式单个文件,查看到文件已经被格式化了,并且在《Build Output》窗口能够查看运行命令信息。

2.2.2 批量文件格式修改演示

        点击Tools-->astyle格式多个文件,查看到当前文件所在的文件夹中的所有*.c文件已经被格式化了,并且在《Build Output》窗口能够查看运行命令信息(main.c文件已经在单个文件格式修改演示中被修改,所以这里不会被修改)。


使用特权

评论回复
沙发
kmzuaz| | 2024-10-7 13:33 | 只看该作者
astyle(Artistic Style)是一个用于C, C++, C++/CLI, Objective-C, C# 和 Java 代码的源代码格式化工具。它可以自动对代码进行格式化,以保持代码风格的一致性。

使用特权

评论回复
板凳
phoenixwhite| | 2024-10-7 15:28 | 只看该作者
大多数IDE(如Visual Studio、Eclipse、CLion等)都支持通过插件或内置功能集成astyle。

使用特权

评论回复
地板
sdCAD| | 2024-10-7 17:35 | 只看该作者
Astyle是一个功能强大的代码格式化工具,它支持多种编程语言(如C、C++、C#和Java)的代码格式化,并提供了丰富的自定义选项,帮助程序员统一代码风格。

使用特权

评论回复
5
biechedan| | 2024-10-7 18:45 | 只看该作者
AStyle 提供了许多其他的格式化选项,例如:

--convert-tabs:转换制表符为指定数量的空格。
--pad-header:为类头添加空格。
--add-brackets:在条件语句后添加括号。
--break-blocks:折行块状结构。
--break-after-logical:逻辑运算符后折行。

使用特权

评论回复
6
abotomson| | 2024-10-7 20:06 | 只看该作者
常用命令行选项
--style:指定代码风格,如--style=ansi表示使用ANSI风格。
--indent:设置缩进,如--indent=spaces=3表示使用3个空格作为缩进。
--brackets:控制大括号的位置,如--brackets=attach表示将大括号附加到前一行。
--pad-oper:在运算符周围添加空格,如--pad-oper表示在运算符前后添加空格。

使用特权

评论回复
7
sdCAD| | 2024-10-7 22:06 | 只看该作者
Astyle常用配置参数
Astyle提供了丰富的配置参数,可以根据个人或团队的偏好定制代码格式。以下是一些常用的配置参数:

-A1:Brace Style Options,每个括号都单独占一行,成对括号对齐,内容统一向后缩进。
-s4:Tab Options,缩进4个空格。
-xV:Brace Modify Options,将"do-while"语句的右"while"附加到右大括号。
-S:Indentation Options,缩进"switch"块,以便在switch块中缩进"case X:"语句。
-f:在条件语句"if"、"for"、"while"...等语句上下填充空行。
-xg:在逗号后插入空格填充。
-H:在条件语句"if"、"for"、"while"...等语句后插入空格。
-U:去除括号两边不必要的空格。

使用特权

评论回复
8
beacherblack| | 2024-10-8 08:49 | 只看该作者
Astyle的安装相对简单,用户可以从其官方网站或其他可信的软件下载平台获取安装包。
安装完成后,用户可以通过命令行或集成开发环境(IDE)中的插件来使用Astyle。

使用特权

评论回复
9
51xlf| | 2024-10-8 10:24 | 只看该作者
缩进相关选项
--indent=spaces|tabs
这个选项用于指定缩进使用空格还是制表符。例如,使用--indent=spaces会使代码使用空格进行缩进,这在许多代码规范中是推荐的,因为空格缩进在不同的文本编辑器和环境中显示更加一致。
--indent - size=n
当使用空格缩进时,可以通过这个选项指定空格的数量。例如,--indent - size = 4表示每个缩进级别使用 4 个空格,这是一种常见的代码缩进规范。
括号布局选项
--style=ansi|java|kr|stroustrup等
不同的风格选项决定了括号的布局方式。例如,--style = ansi风格下,函数定义时左括号与函数名在同一行,而--style = java风格下,左括号在函数名的下一行。这些不同的风格可以满足不同项目或个人的代码风格偏好。
--break - closing - braces
该选项用于控制在某些情况下(如函数结尾、循环结尾等)右括号的换行方式。如果设置了这个选项,右括号可能会单独成行,有助于提高代码的清晰度。
空格使用选项
--pad - oper
这个选项会在操作符(如算术运算符、逻辑运算符等)两边添加空格。例如,表达式a + b会被格式化为a + b,使代码看起来更加清晰。
--unpad - paren
与--pad - oper相反,--unpad - paren会去除括号内部不必要的空格。例如,( a )会被格式化为(a)。

使用特权

评论回复
10
plsbackup| | 2024-10-8 12:22 | 只看该作者
Astyle(Artistic Style)是一个开源的代码格式化工具。它能够自动将源代码按照预定义的格式规则进行格式化,支持多种编程语言,包括 C、C++、Java、C# 等。其主要功能是对代码的缩进、空格使用、括号布局等方面进行统一的格式化,提高代码的可读性和可维护性。

使用特权

评论回复
11
juliestephen| | 2024-10-8 14:09 | 只看该作者
astyle支持使用配置文件来设置格式化规则。配置文件是一个文本文件,其中包含了astyle的命令行选项。

使用特权

评论回复
12
mmbs|  楼主 | 2024-10-8 16:05 | 只看该作者
格式化后的代码结构更加清晰,便于查找代码中的错误和进行代码的修改。在后续的维护过程中,开发人员可以更快地理解代码的逻辑结构。

使用特权

评论回复
13
benjaminka| | 2024-10-8 17:54 | 只看该作者
常用选项
-n 或 --indent=spaces=Num:设置缩进为Num个空格。
-t 或 --indent=tab:使用制表符进行缩进。
-x 或 --pad-oper:在操作符周围添加空格。
-p 或 --pad-paren:在括号内添加空格。
-P 或 --pad-header:在函数头的大括号内添加空格。
-B 或 --break-blocks:在左大括号后添加空行。
-j 或 --java-style:使用Java风格。
-k 或 --keep-one-line-blocks:保持单行代码块。
-y 或 --fill-empty-lines:用空格填充空白行。
-S 或 --style=style:设置代码风格(如java, kr, stroustrup等)。
-f 或 --indent-preproc-block:缩进预处理块。
-H 或 --indent-preproc-define:缩进预处理定义。
-U 或 --convert-tabs:将制表符转换为空格。
-W 或 --max-code-length=Num:设置代码行的最大长度。

使用特权

评论回复
14
ulystronglll| | 2024-10-8 19:47 | 只看该作者
Astyle(Artistic Style)是一个开源的代码格式化工具,用于自动调整C, C++, C#和Java代码的格式。它可以帮助开发者保持代码的一致性和可读性,尤其是在团队协作时,确保所有成员遵循相同的编码风格。

使用特权

评论回复
15
modesty3jonah| | 2024-10-8 21:26 | 只看该作者
跨平台:Astyle可以在多种操作系统上运行,包括Windows、Linux和macOS。
丰富的命令行选项:Astyle提供了大量的命令行参数,允许用户自定义代码格式化的各个方面。
预定义的风格:Astyle内置了几种预定义的代码风格,如Allman、Java、K&R和1tbs等,用户可以根据需要选择。
批量处理:Astyle可以一次性格式化多个文件,甚至整个项目中的所有源代码文件。

使用特权

评论回复
16
suncat0504| | 2024-10-15 18:51 | 只看该作者
能使用Eclipse开发,确实方便,插件多,界面友好,编码方便。只是目前还是使用Keil开发的居多吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

194

主题

6601

帖子

3

粉丝