keil MDK5插件推荐——Astyle代码格式化插件


前言

代码格式化是提高代码质量和可读性的重要手段之一。然而,在Keil MDK5中并没有内置代码格式化工具,因此需要寻找第三方工具来解决这个问题。开源的代码格式化工具Astyle能以插件的形式集成到Keil中以满足我们对代码格式化的需求。

本文将详细介绍如何下载、配置Astyle,并在Keil中设置Astyle,以及使用快捷键调用Astyle的方法。


一. Astyle介绍

Astyle官网:https://astyle.sourceforge.net/

Artistic Style 是一种用于 C、C++、C++/CLI、Objective-C、C# 和 Java 编程语言的源代码缩进器、格式化程序和美化程序。它用 C++ 编写,可以从命令行中使用,也可以被嵌入到另一个程序中作为库。选项可以从命令行或选项文件中输入。库版本可以从用其他语言编写的程序中调用。

Artistic Style 为开源软件,可以在 MIT 许可证下使用和分发。MIT 许可证是一种对软件使用最少限制的宽松许可证。它与 GNU 通用公共许可证 (GPL) 和大多数其他许可证兼容。

从官网可以进入Astyle的文档和下载界面。

二. Astyle常用配置

此节完全参考Astyle的Documentation,但仅列出了我了个人感兴趣的关于C语言的配置选项,对于其它的C语言配置选项以及其它语言配置选项均未列出,对全部配置选项感兴趣的同学可去官网看文档。

2.1 Brace Style Options(花括号样式选项)

1.–style=allman / --style=bsd / --style=break / -A1

​ Allman样式使用折行的大括号。

2.–style=java / --style=attach / -A2

​ Java样式使用紧挨着的大括号。

3.–style=kr / --style=k&r / --style=k/r / -A3

​ Kernighan & Ritchie样式使用Linux风格的花括号。命名空间、类和函数定义的左花括号是单独一行的。花括号与其他所有内容都相连,包括函数内的数组、结构、枚举和语句。

​ 使用k&r选项可能会因为&符号而导致问题。可以通过将k&r用引号括起来(例如 ‑‑style=“k&r”)或使用其中一个备选项(‑‑style=kr或‑‑style=k/r)来解决此问题。

4.–style=1tbs / --style=otbs / -A10

​ "One True Brace Style"使用Linux风格的花括号,并且对没有花括号的单行条件语句添加花括号。命名空间、类和函数定义的左花括号是单独一行的。花括号与其他所有内容都相连,包括函数内的数组、结构、枚举和语句。

4种风格的对比如下图所示。我个人更偏爱1tbs样式

2.2 Tab Options(Tab选项)

默认选项:–indent=spaces=4或者-s4,意思是用4个空格替代Tab,所以这部分保持默认即可,无需设置

2.3 Brace Modify Options(大括号修改选项)

1.–attach-closing-while

将“do-while”循环语句的“while”附加到关闭大括号上。此选项比大括号样式和“break closing braces”选项具有更高的优先级。

2.4 Indentation Options(缩进选项)

1.–indent-preproc-define

定义多行define的缩进。

2.–indent-col1-comments / -Y

缩进以第一列开头的C++注释。默认情况下,C++中以第一列开头的注释被视为注释掉的代码并不进行缩进。使用此选项可以使这些注释与代码一起进行缩进。

2.5 Padding Options(填充选项)

1.–break-blocks / -f

在控制块周围添加空行(例如,‘if’,‘for’,‘while’…)。

2.–pad-oper / -p

在运算符周围插入空格填充。这也会在逗号周围添加空格。任何行尾注释将尽可能保留在原始列中。请注意,没有取消填充的选项。一旦填充了,它们就保持填充状态。

3.–pad-comma / -xg

在逗号后插入空格填充。如果使用pad-oper,这不是必需的。任何行尾注释将尽可能保留在原始列中。请注意,没有取消填充的选项。一旦填充了,它们就保持填充状态。

4.–pad-header / -H

在头部(例如,‘if’,‘for’,‘while’…)和随后的括号之间插入空格填充。任何行尾注释将尽可能保留在原始列中。这可以与unpad-paren一起使用,以删除不需要的空格。

5.–unpad-paren / -U

删除括号内外的额外空格填充。任何行尾注释将尽可能保留在原始列中。此选项可以与上面的paren padding选项pad‑paren、pad‑paren‑out、pad‑paren‑in和pad‑header组合使用。只会移除其他选项未请求的填充。

例如,如果源代码中的括号内外都有填充,而您只想保留内部填充。您需要使用unpad-paren来删除外部填充,然后使用pad‑paren‑in来保留内部填充。仅使用pad‑paren‑in可能不会删除外部填充。

6.–delete-empty-lines / -xe

删除函数或方法中的空行。函数或方法外的空行不会被删除。如果与break-blocks或break-blocks = all一起使用,则将删除除break-blocks选项添加的行之外的所有行。

7.–align-pointer=name / -k3

将指针或引用运算符(*,&或^)靠近变量名称,这是更优秀的C语言风格,特别是在同一行声明多个变量时,更加清晰。

2.6 Formatting Options(格式化选项)

1.–break-one-line-headers / -xb

从与语句位于同一行的语句中断一行标题(例如,‘if’,‘while’,‘else’,…)。如果语句被大括号括起来,则大括号将根据请求的大括号样式进行格式化。

如果请求keep-one-line-statements,则不会中断多语句行。如果请求keep-one-line-blocks并且标题包含在块中,则不会中断一行块。

2.–add-braces / -j

向未加括号的一行条件语句(例如,‘if’,‘for’,‘while’ …)添加大括号。语句必须在单行上。大括号将根据请求的大括号样式添加。如果没有请求样式,则将添加大括号。如果选择–style=1tbs 则此选项可不需要。

如果请求keep-one-line-statements,则不会向多语句行添加大括号。如果请求keep-one-line-blocks,则不会向一行块添加大括号。如果与–add-one-line-braces一起使用,则结果将是一行括号。

3.–max-code-length=# / -xC#

max-code-length选项将在代码超过#个字符时中断该行。有效值为50到200。没有逻辑条件的行将在逻辑条件(||,&&,…),逗号,括号,分号或空格上中断。

某些代码不会被中断,例如注释、引号和数组。如果与keep-one-line-blocks或add-one-line-braces一起使用,则不会中断块。如果与keep-one-line-statements一起使用,则如果行超过最大长度,语句将在分号处中断。如果在最大代码长度内没有可用的断点,则该行将在最大代码长度后找到第一个可用的断点处中断。

建议设置为–max-code-length=120。


三. Astyle无法实现的效果

1.无法实现两个短行拼成一个长行的效果

2.无法去除非括号内多余的空格

其它无法实现的效果(待补充)…。

总的来说Astyle的代码格式化功能还是不那么完善,格式化效果Clang-foramt,它的主要优势是使用起来比较简单方便。


四. 在Keil中设置Astyle

解压下载得到的安装包,将其放到Keil安装目录中,如F:\Keil_v5\,如下图所示。

打开Keil,Tools -> Customize Tools Menu…

在Command(命令)行中填入astyle.exe的绝对路径。

在Arguments(参数)行中填入配置选项,如下:

!E --style=1tbs --indent-col1-comments --break-blocks --pad-oper --pad-comma --pad-header --unpad-paren --delete-empty-lines --align-pointer=name --break-one-line-headers --add-braces --max-code-length=120

在文章中不方便复制的同学可以关注我的公众号:徐晓康的博客,回复以下四位数字获取配置。

3567

建议复制过去不会码错字!

设置完之后,就可以通过Tools -> Astyle Current File来调用Astyle格式化当前文件,如下图所示。

注意,必须先Ctrl + S保存更改后再调用Astyle,否则调用是无效的

如果想更方便的调用Astyle,可以设置快捷键,方法如下:

Edit -> Configuration…,打开配置窗口,在Shorteut Keys界面找到Tools:Astyle Current File,点击Create Shortcut,输入想设置的快捷键即可。


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

  • 15
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值