1. 程式人生 > >一鍵自動格式化你的代碼

一鍵自動格式化你的代碼

完成後 alt uri 程序 str ogl oss 我的電腦 指針

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文件到單片機

歡迎大家關註我的個人博客

或微信掃碼關註我的公眾號
技術分享圖片

一鍵自動格式化你的代碼