一鍵自動格式化你的代碼

AStyle簡介

AStyle,即Artistic Style,是一個可用於C, C++, C++/CLI, Objective‑C, C# 和Java編程語言格式化和美化的工具。咱們在使用編輯器的縮進(TAB)功能時,因爲不一樣編輯器的差異,有的插入的是製表符,有的是2個空格,有的是4個空格。這樣若是別人用另外一個編輯器來閱讀程序時,可能會因爲縮進的不一樣,致使閱讀效果一團糟。爲了解決這個問題,使用C++開發了一個插件,它能夠自動從新縮進,並手動指定空格的數量,自動格式化源文件。它是能夠經過命令行使用,也能夠做爲插件,在其餘IDE中使用。html

基本使用

下載完成後,解壓,而後在環境變量PATH,添加AStyle.exe的路徑。java

基本命令行格式:linux

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命令窗口,輸入如下命令:windows

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

參考資料

插件的下載

AStyle_3.1_windows.zip


Jlink使用技巧系列文章:


歡迎你們關注個人我的博客

或微信掃碼關注個人公衆號

相關文章
相關標籤/搜索