利用sourceinsight宏(Quicker.em)提升編碼效率和質量

利用sourceinsight宏(Quicker.em)提升編碼效率和質量
Marco是sourceinsight軟件一個強大的功能,用戶能夠經過編寫宏來實現自定義功能。這裏有個比較流行的宏文件quicker.em,原做者貌似是原Huawei公司的員工編寫整理的,基本功能比較全,能夠知足通常的需求,我的也能夠根據這個爲基礎進行更個性化的改寫。c++

經過以下配置:
1.運行SI,打開Base工程,將Quicker.em加入到工程中;
2.安裝觸發熱鍵和菜單,打開SI的Options的Key Assignments菜單,在Command窗口中選擇Macro: AutoExpand而後對其賦一個熱鍵,例如Ctrl Enter。
附下quicker.em的功能說明:
1 標準C語言擴展
1.1 /* 自動生成/* */
該命令自動生成C語言的註釋,它能自動換行對齊,在把文檔中一長串註釋拷貝 過來時特別管用,不用本身去對齊了。還能自動識別中文和英文單詞,對於中文不會把一個字分開,對於英文單詞分開時會自動添加連字符,下面是一個註釋的例子 abcdefghijk = abcd + cdefg + hijk /*該命令自動生成C語言的註釋,它能自 動 換行對齊,在把文檔中一長串註釋拷 貝 過來時特別管用,不用本身去對齊了。*/ 
1.2 { 自動生成 } 
1.3 while (wh) 自動生成While語句
while ( # )
{
#
}

1.4 if 自動生成if語句
if 生成if結構的語句
ife 對應生成if else結構的語句
ifs 對應生成if elseif else結構的f語句
if ( # )
{
#

1.5 for 自動生成for語句,支持塊命令插入
該命令自動生成以下格式
for ( #; #; # )
{
#
}
1.5.1 fo 自動生成for語句與前一條命令相比它直接會定義循環變量
UINT32 ulI = 0;

for ( ulI = 0; ulI < #; ulI++ )
{
#
}

1.6 do 自動生成 do while語句
該命令自動生成以下格式
do
{
#
} while ( # ); 
1.7 #ifd 自動生成 #ifdef 命令
該命令生成以下格式 
#ifdef UMSC
#endif /* UMSC */ 
1.8 #ifn 自動生成 #ifndef 命令
該命令生成以下格式
#ifndef UMSC
#endif /* UMSC */ 
1.9 #if 自動生成 #if 命令
該命令生成以下格式
#if ( UMSC == 1)
#endif /*if ( UMSC == 1) */ 
1.10 cpp 自動生成適用於c++的c原型說明定義
該命令生成以下格式
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */


#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

1.11 switch (sw) 自動生成switch語句
該命令將提示輸入case的個數,生成以下格式
switch ( # )
{
case #:
#
break;
default:
#
}

1.12 case (ca)自動生成case語句
支持塊命令輸入
該命令生成以下格式,用它能夠避免遺漏break
case #:
#
break; 

1.13 struct (st) 自動生成結構類型
該命令自動生成以下結構定義,它提示輸入結構名,會自動轉換成大寫形式,而且自動在其後添加_STRU做爲結構類型
typedef struct HELLO_TEST
{

}HELLO_TEST_STRU;

1.14 enum (en) 自動生成枚舉類型
該命令自動生成以下結構定義,它提示輸入結構名,會自動轉換成大寫形式,而且自動在其後添加_STRU做爲結構類型
typedef enum HELLO_TEST
{

}HELLO_TEST_ENUM;


2 標準說明生成
2.1 config (co) 配置用戶名和標題的說明語種
用戶名就是前面自動生成的做者,修改者的名字,語種

2.2 file (fi) 生成標準的文件頭
自動生成以下格式,它能自動取得文件名,做者名,時間,以及函數列表

2.3 func (fu) 生成標準的函數頭說明
其 自動生成以下函數頭,該函數必須在該函數的前一行執行,它能自動取得函數名,可以自動取得函數的輸入、輸出參數,而且排列好,同時生成日期和做者。可以 提示輸入功能描述,輸入的內容可以自動換行對齊,這樣既能夠避免遺漏說明,並且通常在詳細設計中對每一個函數的主要功能都有詳細的描述,只要把這些描述 拷貝過來便可,它能自動排列好, 很是方便。 (由於SI的宏功能有限,沒能自動加入調用函數和被調函數的功能)
若是不是在已存在的函數前執行則提示輸入函數名,提示輸入函數描述,提示輸入返回值類型,提示輸入函數入口參數,輸完後按Esc退出 

2.4 hi 增長修改歷史列表
自動在該行增長修改歷史列表,用於文件頭和函數頭說明中的歷史記錄更新,其添加形式以下 

2.5 hd 自動生成函數頭文件
該命令可以自動生成但前C文件的頭文件定義,包括經常使用的宏定義,還有所有的函數原型定義。 

2.6 Hdn 生成新的有文件
該命令可以自動生成指定的的頭文件定義,包括經常使用的宏定義,提示輸入函數原型的類型。

3 代碼修改註釋
3.1 pn 添加問題單號
在進行問題單修改時都要求在修改的地方註明問題單號和修改人以及修改時間,大部分一個問題單的修改都會涉及到幾個地方,本功能提供自動取問題單號的功能,下面的幾個命令所生成的問題單號就是有它提供,若是輸入爲#則不顯示問題單號
3.2 ap 添加問題單修改說明
該命令提示輸入問題單號和修改緣由,生成以下格式的說明

3.3 ab 添加開始說明
它能自動生成以下說明:
1.有問題單號的狀況,其中問題單號是由ap命令加入的。
/*BEGIN: Added by lushengwen, 2002/5/13 問題單號:D02556*/
2.沒有問題單號的狀況,
/*BEGIN: Added by lushengwen, 2002/5/13*/

3.4 ae 添加結束命令
該命令是as的對應命令,表示結束添加
支持塊命令操做

3.5 abg 插入添加開始和結束說明
該命令是前兩個命令的組合
支持塊命令操做

3.6 db 刪除開始命令
它能自動生成以下說明:
1.有問題單號的狀況,其中問題單號是由ap命令加入的。
/*BEGIN: Deleted by lushengwen, 2002/5/13 問題單號:D02556*/
2.沒有問題單號的狀況,
/*BEGIN: Deleted by lushengwen, 2002/5/13 */

3.7 de 刪除結束命令
該命令是ds的對應命令,表示刪除結束

3.8 dbg 插入刪除開始和結束說明
該命令是前兩個命令的組合
支持塊命令操做

3.9 mb 修改開始命令
它能自動生成以下說明:
1.有問題單號的狀況,其中問題單號是由ap命令加入的。
/*BEGIN: Modified by lushengwen, 2002/5/13 問題單號:D02556*/
2.沒有問題單號的狀況,
/*BEGIN: Modified by lushengwen, 2002/5/13 */

3.10 me 修改結束命令
該命令是ms的對應命令,表示刪除結束

3.11 mbg 插入修改開始和結束說明
該命令是前兩個命令的組合
支持塊命令操做編程

 

4      其他幾個經常使用宏編輯器

4.1     將從C++的 // 註釋改成標準的C /* */註釋函數

ComentCPPtoC()  文件中的//註釋自動修改成/* */註釋,由於不少C編譯器不能很好的處理C++風格的 // 註釋,用該命令能夠方便的將選中區域內的//註釋進行修改,建議將該宏定義在菜單中。ui

4.2     能自動將Tab轉換成空格(mstp_out.c)編碼

ReplaceBufTab()  自動將單前文件中的Tab轉換成空格spa

ReplaceTabInProj()  自動將工程中的文件中的Tab轉換成空格設計

由於不一樣的編輯器對tab的長度定義不一至,形成代碼格式紊亂,編程規範是不容許用tab鍵的,能夠用該宏來將整個文件的tab進行替換,很是方便,建議將該宏定義在菜單中調試

4.3     插入當前的函數名orm

InsertFuncName ()  能自動的插入本函數名,如今的函數名通常較長,特別是在調試打印代碼中爲了顯示出出錯的函數常常須要輸入本函數名,該宏能帶來極大方便。建議定義爲一個熱鍵 ctrl 1

4.4     自動在函數入口、出口插入、刪除打印函數

注意使用本功能時必定要求全部的語句符合公司編程規範,要求一條語句一行,由於各類編碼狀況很複雜,特別是老代碼和有大量條件編譯的狀況下很難覆蓋各類狀況,最好在執行完後再檢查一遍。不推薦使用工程內的插入和刪除。

InsertTraceInfo()  可以自動在函數的出、入口首尾加入打印代碼,即在光標處加入一個進入函數的打印,在函數的返回處加入一個出函數的打印,用於調試跟蹤時很方便,建議定義爲熱鍵 Ctrl t

AutoInsertTraceInfoInBuf()可以在當前文件的函數出入口加入打印信息,定義菜單

AutoInsertTraceInfoInPrj()可以在當前工程的函數出入口加入打印信息,定義爲菜單

RemoveTraceInfo() 刪除InsertTraceInfo()添加的打印信息,定義爲菜單

RemoveCurBufTraceInfo()刪除文件中所有的InsertTraceInfo()添加的打印信息,定義爲菜單

RemovePrjTraceInfo()刪除但前工程中所有的InsertTraceInfo()添加的打印信息,定義爲菜單

4.5     自動格式當前行

FormatLine()  可以自動將一行長的文字分紅多行,而且從第二行開始,起始列爲關標所在列,該宏是爲了彌補由於對話框只能處理256個字符而編寫的,當須要輸入超過256個字符的說明時,就能夠先把它拷貝到第一行,而後執行本宏,進行分行對齊。

4.6     更新函數列表

UpdateFunctionList() 可以自動在光標所在行從新生成函數列表,用於函數頭說明的函數列表更新。

 

4.7     複合語句刪除

DelCompoundStatement()能自動刪除複合語句,定義熱鍵 Ctrl D

對於以下語句,若是我想刪除條件 ulCount  > 0,只需將光標放在if語句這一行(藍色行),執行 Ctrl D 便可

    stSubsystemRec.hwRBSubSystemCpuAveUsageLimit = CPU_RESTORE_THRESHOLD;

    if( ulCount > 0 )

    {

        stSubsystemRec.hwRBSubSystemAdminStatus = ADSTATUS_DOWN;

        stSubsystemRec.hwRBSubSystemCpuMaxUsageLimit = CPU_ALARM;

        stSubsystemRec.hwRBSubSystemDSPAveUsageLimit = DSP_ALARM;

        stSubsystemRec.hwRBSubSystemDSPMaxUsageLimit = DSP_RESTORE;

        stSubsystemRec.hwRBSubSystemOperStatus = OPSTATUS_OTHER;

    }

    stSubsystemRec.hwRBSubSystemIndex = 0;

    stSubsystemRec.hwRBSubSystemIpAddress = ulIpAddr;

執行結果

    stSubsystemRec.hwRBSubSystemCpuAveUsageLimit = CPU_RESTORE_THRESHOLD;

    stSubsystemRec.hwRBSubSystemAdminStatus = ADSTATUS_DOWN;

    stSubsystemRec.hwRBSubSystemCpuMaxUsageLimit = CPU_ALARM;

    stSubsystemRec.hwRBSubSystemDSPAveUsageLimit = DSP_ALARM;

    stSubsystemRec.hwRBSubSystemDSPMaxUsageLimit = DSP_RESTORE;

    stSubsystemRec.hwRBSubSystemOperStatus = OPSTATUS_OTHER;

    stSubsystemRec.hwRBSubSystemIndex = 0;

    stSubsystemRec.hwRBSubSystemIpAddress = ulIpAddr;

4.8      註釋掉多行

      AddComment 可以將多行代碼註釋掉

      DelComment 能夠解除AddComment的註釋

   

4.9     其它跟擴展命令對應的宏

下面宏能夠根據須要定義爲熱鍵

ClearPrombleNo    清除問題單   Alt Del

ExpandBraceLarge  加入{}  /*支持塊輸入*/  Ctrl ]

 ExpandBraceLittle   加入() /*支持塊輸入*/  Ctrl  Shift  9

ExpandBraceMid     加入[] /*支持塊輸入*/  Alt [

FileHeaderCreate    生成文件頭說明           Ctrl Shift i

 FunctionHeaderCreate  生成函數頭說明     Ctrl Shift u

 HeaderFileCreate     生成頭文件                  Ctrl  Shift d

 InsertCase                 插入case語句  Ctrl Alt c

InsertDo                      插入do語句  /*支持塊輸入*/  Ctrl Alt d

InsertElse                  插入else語句  /*支持塊輸入*/  Ctrl Alt e

InsertFor                   插入for語句  /*支持塊輸入*/  Ctrl Alt  f

InsertIf                       插入if語句  /*支持塊輸入*/      Ctrl Alt I

InsertSwitch              插入switch語句                           Ctrl Alt s

InsertWhile               插入while語句  /*支持塊輸入*/   Ctrl Alt w

InsIfdef                     插入#ifdef語句   /*支持塊輸入*/      Ctrl  3

PredefIfStr                  插入#if語句    /*支持塊輸入*/         Alt  3

InsertReviseAdd        插入添加說明   /*支持塊輸入*/         Ctrl  Shift  a

InsertReviseDel         插入刪除說明  /*支持塊輸入*/         Ctrl  Shift  r

InsertReviseMod       插入修改說明  /*支持塊輸入*/         Ctrl  Shift  m

相關文章
相關標籤/搜索