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

news2024/11/25 4:55:55

前言

代码格式化是提高代码质量和可读性的重要手段之一。然而,在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与嵌入式知识,软件,工具等内容,欢迎大家关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/534794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《永恒之塔sf私服》“龙战前传”里的更高挑战-

关于这个新版本的各种更新内容已经屡见不新,无论是最新关注的玩家,抑或是一直坚守在永恒之塔阵地的老玩家们,相信已经对各种感兴趣的更新倒背如流。这里就不再重复。 每一款MMO游戏升级,伴随着玩家技术和战术的长进,游…

【Unity-UGUI控件全面解析】| ScrollView 滚动视图组件详解

🎬【Unity-UGUI控件全面解析】| ScrollView 滚动视图组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习…

火线、零线和地线及开关接线参考

火线、零线和地线及开关接线参考 1. 火线、零线和地线 1.1. What is Live wire? Live wire,L:火线,相线火线是电路中输送电的电源线。 1.2. What is Neutral wire? Neutral wire,N:零线零线是由发电机或变压器二…

AD 实现多 DC + 多 ADFS 高可用部署

总览 在本篇文章中, 我将记录部署多 DC 多 ADFS 实现高可用方案的详细步骤, 期间我会尽量使用 PowerShell 来实现相应的动作, 实在找不到命令或者 GUI 更方便的再附截图. 主要步骤分为: 部署 2 台 DC 服务器提供 AD 服务 (AD域名 alian.com)安装 ADCS 角色为 ADFS 提供证书服…

NodeJs模块化之下半部分

Node.js 中的模块化 更多精彩内容,请微信搜索“前端爱好者“, 戳我 查看 。 官网地址:https://nodejs.cn/api/ fs 文件系统 地址:https://nodejs.cn/api/fs.html#%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F node:fs 模块能够以标准…

GPT-3 面试题

简介 1、GPT-3 是什么?它是基于什么模型的? GPT-3是一种基于深度学习原理的语言预测模型。它是由OpenAI开发的,可以从互联网数据中生成任何类型的文本。它只需要一小段文本作为输入,就可以生成大量的准确和复杂的机器生成文本⁴…

Akura Medica:新型静脉血栓切除系统,完成首次人体试验

Akura Medical公司宣布,其机械血栓切除平台在人体首次使用成功,这是一项具有突破性的技术,可以有效地治疗肺栓塞、深静脉血栓等血栓栓塞疾病。该平台使用了一种与众不同的方法,可以高效地清除血管内的血栓,同时保护血管…

测试分词工具Lucene.Net.Analysis.PanGu(盘古分词)

从微信公众号及百度文章来看,全文检索的前置工作是分词,首先将要做全文检索的内容分词,然后采用全文检索模块或工具进行全文检索。参考文献4介绍了基于Lucene.net实现全文检索的大致思路,其采用的是Lucene.net盘古分词的方式实现。…

蓝桥:前端开发笔面必刷题——Day1 数组(一)

文章目录 📋前言🎯数组中重复的数字📚题目内容✅解答 🎯两数之和📚题目内容✅解答 🎯替换空格📚题目内容✅解答 🎯二维数组中的查找📚题目内容✅解答 📝最后 …

C语言-程序环境与预处理

程序环境与预处理 程序环境翻译环境(编译链接)预编译编译汇编链接 执行环境 预处理预定义符#define定义的标识符 宏#define定义宏#define替换规则宏的命名约定带副作用的宏参数宏和函数的比较 其它#和##的使用字符串常量化运算符#标记粘贴运算符## 命令行…

fastled教程

文章目录 EVERY_N_MILLISECONDS(10)EVERY_N_SECONDS(5)fill_solid(leds, NUM_LEDS, CRGB::Red);fill_gradient_RGBfill_rainbow(leds, NUM_LEDS, i, 255 / NUM_LEDS);效果1fadeToBlackBy(leds, NUM_LEDS, 1); 效果2FastLED.setBrightness(2*i);// 效果3leds[i] CHSV(hue (i *…

scanf和scanf_s的区别、解决VS返回值被忽略的报错问题

一、scanf和scanf_s是什么? scanf()不会检查输入边界,可能造成数据溢出。 scanf_s()会进行边界检查。 二、分别分析 1.scanf scanf表示从键盘输入指定格式的数据。如:scanf("%d",x);指从键盘给x输入一个int型(整型&…

【计网】【TCP】浅析TCP三次握手

前言 之前学习计网时不认真,TCP三次握手稀里糊涂就过去了,最近在重新查漏补缺计网这方面的知识,饭要一口一口吃,我就没有把其中涉及到的大量知识点写在此博客中,此文仅管中窥豹,之后再详细写吧。 笔记中有…

初步认识性能测试和完成一次完整的性能测试

上一篇博文主要通过两个例子让测试新手了解一下测试思想,和在做测试之前应该了解人几点,那么我们在如何完成一次完整的性能测试呢? 测试报告是一次完整性能测试的体现,所以,这里我给出一个完整的性能测试报告&#xff…

搞懂@DateTimeFormat 注解 和 对应的时间类型

通常而言,前端时间控件,一般情况下直接会传一个yyyy-MM-dd的日期字符串到后台。如果我们直接用java.util.Date类型来接收,是无法获取的。这是因为Date类型默认的格式为:Tue May 16 00:00:00 CST 2023这种。 举例 ApiOperation(val…

Games104现代游戏引擎学习笔记08

渲染那部分看的云里雾里的,等学完其他图形学的内容再回头开吧 游戏动画的三个挑战: 1.根据交互实时的反应各种变化 2.一帧时间里的庞大计算 3.更真实自然的表现 2D动画 sprite animation 把每一帧精灵循环绘制出来 2D技术实现3D效果 在各个视角采了一…

shell脚本——流编辑器“三剑客”之awk命令

shell脚本——流编辑器“三剑客”之awk命令 一、awk1、工作原理2、命令格式3、awk常见的内建变量(可直接用)4、按行输出文本5、按字段输出文本’:’6、通过管道、双引号调用shell命令 一、awk 1、工作原理 逐行读取文本,默认以空格或TAB键为…

射频放大器的原理和作用(射频放大器和功率放大器的区别)

射频放大器是一种电子电路,用于将输入信号增强到足够高的电平以驱动射频输出负载。其原理和作用如下: 射频放大器的工作原理是利用晶体管的三极管效应,将输入信号放大到足够的电平以驱动输出负载。在射频放大器中,输入信号经过输入…

深入理解 python 虚拟机:破解核心魔法——反序列化 pyc 文件

深入理解 python 虚拟机:破解核心魔法——反序列化 pyc 文件 在前面的文章当中我们详细的对于 pyc 文件的结构进行了分析,pyc 文件主要有下面的四个部分组成:魔术、 Bite Filed 、修改日期和 Code Object 组成。在前面的文章当中我们已经对前…

Android NDK: 使用Python生成下载地址

文章目录 1. 目的2. NDK下载链接3. 生成链接的 Python 脚本4. Bonus: 生成表格的 Python 脚本 1. 目的 Android NDK 的 github wiki 中给出了部分历史版本 NDK 的下载地址,有些版本的下载地址并没有在网页中给出。实际上这些下载地址很有规律。本文给出具体的链接&…