一鍵自動格式化你的代碼
AStyle簡介
AStyle,即Artistic Style,是一個可用於C, C++, C++/CLI, Objective?C, C# 和Java編程語言格式化和美化的工具。我們在使用編輯器的縮進(TAB)功能時,由於不同編輯器的差別,有的插入的是制表符,有的是2個空格,有的是4個空格。這樣如果別人用另一個編輯器來閱讀程序時,可能會由於縮進的不同,導致閱讀效果一團糟。為了解決這個問題,使用C++開發了一個插件,它可以自動重新縮進,並手動指定空格的數量,自動格式化源文件。它是可以通過命令行使用,也可以作為插件,在其他IDE中使用。
基本使用
下載完成後,解壓,然後在環境變量PATH,添加AStyle.exe的路徑。
基本命令行格式:
astyle [參數] [文件路徑]
如在我的電腦E盤下有一個文件main.c,現在是這樣的,可以看出很不規範,多個語句寫在同一行,沒有合理縮進,運算符兩邊沒有空格等等。
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" int main(void) { delay_init(); //延時函數初始化 LED_Init(); //初始化與LED連接的硬件接口 while(1) { LED0=0;LED1=1; delay_ms(300); //延時300ms LED0= 1;LED1 =0; delay_ms(300); //延時300ms } }
打開CMD命令窗口,輸入以下命令:
AStyle --style=ansi E:\main.c
回車執行命令,然後再打開main.c查看,變成了這樣:
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" int main(void) { delay_init(); //延時函數初始化 LED_Init(); //初始化與LED連接的硬件接口 while(1) { LED0 = 0; LED1 = 1; delay_ms(300); //延時300ms LED0 = 1; LED1 = 0; delay_ms(300); //延時300ms } }
是不是看著很舒服,合理縮進、美觀、可讀性高,是規範的代碼風格,當然這只是AStyle一個很基礎的功能,其實它支持很多參數,還可以對整個目錄及子目錄下的源文件進行格式化操作。
Keil開發環境添加AStyle插件
很多IDE都有自動格式化代碼功能,而單片機開發經常使用的Keil系列軟件居然沒有這個功能,這怎麽能忍?還好Keil有自定義插件的功能,可以添加AStyle自動格式化的工具,來格式化我們不規範的代碼。
1.打開Keil軟件
選擇Tools->Customize Tools Menu,自定義外部工具菜單。
2.新建工具
點擊新建按鈕,輸入工具名稱:Astyle Current File
,Command命令選項,指定AStyle.exe的路徑,Argument選項輸入以下參數,註意大小寫,建議復制粘貼,不會出錯。
-pnUk1s4 --style=ansi !E
這些命令參數的含義,在下面有詳細介紹,其中!E
表示當前文件,這個參數在Keil軟件的使用手冊裏可以查到。點擊OK保存。
3.試試格式化效果
好了,現在來試一下一鍵自動格式化工具吧,無論你的代碼寫的有多亂,只要點擊Tools->Astyle Current File工具,你就會發現代碼一下子變得美觀了許多,就像這樣。
4.定義一個快捷鍵
為了更方便,我們還可以自定義一個快捷鍵,來執行這個命令。點擊工具欄最右邊的配置圖標,切換到Shortcut Keys選項,選擇Tools:Astyle Current File,點擊Create Shortcut創建新的快捷鍵,在彈出的窗口按下你要設置的快捷鍵,然後保存退出就可以了,下次需要使用的時候,只要按下相對應的快捷鍵,就可以一鍵將當前文件格式化。
其實,我還是覺得鼠標操作更方便。
AStyle插件參數詳解
AStyle插件的參數實在太多了,這裏只介紹我們上面那個命令中用到的參數。
-pnUk1s4 !E --style=ansi
命令參數詳解:
參數名 | 大小寫 | 說明 |
---|---|---|
p | 小寫 | 只在操作符兩邊加空格 |
P | 大寫 | 在操作符和括號兩邊都加空格 |
n | 小寫 | 不備份格式化之前的文件,後綴為.orig,默認備份 |
U | 大寫 | 移除括號兩邊不必要的空格 |
d | 小寫 | 只在括號外面插入空格 |
D | 大寫 | 只在括號裏面插入空格 |
k1 | 命令 | 指針或引用運算符*/&/^號靠近類型名 |
k2 | 命令 | 指針或引用運算符*/&/^號在類型名和變量名中間 |
k3 | 命令 | 指針或引用運算符*/&/^號靠近變量名 |
s4 | 命令 | TAB鍵替換為4個空格 |
xC80 | 命令 | 一行最大字符數,超過後會在運算符處換行 |
H | 大寫 | 在關鍵字‘if‘,‘for‘, ‘while‘之後添加空格 |
S | 大寫 | switch 與case不同列,case縮進 |
K | 大寫 | 縮進case下面的語句 |
F | 大寫 | 空行分隔無關塊 |
x | 小寫 | 刪除多余空行 |
--style=ansi | 命令 | 指定程序風格,如kr/linu/gnu等等 |
更多、更詳細的參數說明可以查看自帶的幫助文檔。
BAT命令格式化目錄下的源文件
下面這個bat命令可以格式化當前目錄及子目錄下的所有源文件。
新建bat文件,以記事本打開,輸入以下命令:
for /R %%f in (*.c;*.h) do AStyle.exe --style=allman --indent=spaces=4 --pad-oper --pad-header --unpad-paren --suffix=none --align-pointer=name --lineend=windows --convert-tabs --verbose %%f
pause
各種代碼風格的比較
這裏只介紹幾種常見的代碼風格,更多的代碼風格參考幫助文檔->Brace Style Options。
allman風格
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
java風格
int Foo(bool isBar) {
if (isBar) {
bar();
return 1;
} else
return 0;
}
kr 風格
int Foo(bool isBar)
{
if (isBar) {
bar();
return 1;
} else
return 0;
}
gnu 風格
int Foo(bool isBar)
{
if (isBar)
{
bar();
return 1;
}
else
return 0;
}
linux 風格
int Foo(bool isBar)
{
if (isFoo) {
bar();
return 1;
} else
return 0;
}
google 風格
int Foo(bool isBar) {
if (isBar) {
bar();
return 1;
} else
return 0;
}
參考資料
- 官方網址:http://astyle.sourceforge.net/
- 幫助文檔:http://astyle.sourceforge.net/astyle.html
- 版本介紹:http://astyle.sourceforge.net/install.html
插件的下載
AStyle_3.1_windows.zip
Jlink使用技巧系列文章:
- Jlink使用技巧之合並燒寫文件
- Jlink使用技巧之燒寫SPI Flash存儲
- Jlink使用技巧之虛擬串口功能
- Jlink使用技巧之讀取STM32內部的程序
- Jlink使用技巧之J-Scope虛擬示波器功能
- Jlink使用技巧之單獨下載HEX文件到單片機
歡迎大家關註我的個人博客
或微信掃碼關註我的公眾號
一鍵自動格式化你的代碼