VcExtend 擴充 VC 6.0 功能,包含函式主體批次產生、資料介面自動產生、註解可隱可現、註解自動產生文件等功能,能大幅提升 VC 工作效率。
VcExtend 使用 VC 6.0 擴充巨集介面,採 VBScript 撰寫,使用起來幾乎與 VC 本身指令無異。完全公開原始碼,可免費使用與修改。
先下載 VcExtend.rar,需安裝 Microsoft XML 外掛。解壓縮後可見 Txt 和 Doc 資料夾:Txt 為建立新類別時使用的程式碼模板,Doc 存放由註解產生的文件與顯示工具。在專案中使用 VcExtend 要將這兩個目錄複製到專案根目錄下。
VcExtend.dsm 為原始碼,複製到 C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Macros 目錄,將裡面提供的指令掛接到工具列即可使用。
若從未用過 VC 6.0 擴充巨集,可依說明操作:啟動 VC 6.0 不開啟專案 → Tools 選單選 Macro → Options → Load Files → 勾選 VcExtend 取消其他 → Toolbars 標籤新增工具列命名 VcExtend → Commands 標籤 Category 選 Macros → 將指令拖到工具列並選 Text Only → Show Menus For 選 All Editors → Close → 重新啟動 VC 6.0 即可使用。
啟動 VC 6.0 開啟 Example\Demo 專案(AppWizard 產生的 SDI 專案,加了兩個類別)。開啟 CShow 類別標頭檔,程式碼特別清爽。用瀏覽器開啟 Doc\Doc.htm,可見 CShow 文件(由註解自動產生)。CTaste 類別文件尚空,待完成。
開啟 CTaste 標頭檔(無功能類別),測試 CodeCleanUp 功能:直接在標頭檔寫函式宣告與成員變數(變數獨佔一行,需讀寫介面者在註解最前加 //R、//W、//RW),點擊 CodeCleanUp,函式主體與介面自動產生。CodeJump 在宣告與實作間跳轉。再試 Comment 功能:游標在函式宣告上點擊產生註解模板,填寫內容後再點一下隱藏/儲存。游標在實作檔點擊 Comment 可調出標頭檔註解閱讀修改。類別註解同理操作。
完成後用瀏覽器開啟 Doc\doc.htm 查看文件,格式類似 MSDN,非常熟悉。
Documents.Open 無回傳值,檔案不存在會造成嚴重記憶體錯誤導致 VC 整個退出Doc 和 Txt 資料夾複製到專案目錄下(與 Debug、res 並列),否則一定出問題// 不用 /**/.inl 檔,一個類別三個檔案,CodeJump 讓你感覺不到多檔案喜歡清爽程式碼者,用 ClassNew 產生新類別是不錯選擇,尤其 CObject 子類別。點擊 ClassNew 輸入類別名稱(如 CMyClass),可選項:繼承類別用 :BaseName、指定檔名用 #FileName、目錄名用 @DirName、巨集選項 /S(可序列化)、/M(訊息類別)。修改 Txt 目錄下 cpp.txt、hpp.txt、inl.txt 可自訂模板。
ClassNew 缺陷:產生類別不自動加入專案與 ClassWizard,需手動加入或先用 VC New Class 產生再用 ClassNew 重新產生。非 ClassNew 產生的類別也可用 VcExtend 功能,首次使用需輸入類別名與基類別名。
CodeCleanUp 三大功能:函式主體產生、資料介面函式產生、函式主體依宣告順序重排序。先寫標頭檔所有函式宣告與成員變數,一下子產生函式主體與介面。
成員變數提供公用介面只需在註解加讀寫標記(//R、//W、//RW),CodeCleanUp 依標記產生介面。隨時修改標記再執行 CodeCleanUp 會自動產生或刪除介面函式。介面函式預設命名規則 Get/Set + 去前綴變數名,可修改。實作程式碼自動產生,通常可直接使用。介面函式皆為內聯,實作在 .inl 檔,CodeJump 方便跳轉。
其他函式宣告最前加 inline 可生成到 .inl。刪除函式:刪除宣告執行 CodeCleanUp,介面函式修改讀寫標記。普通函式不刪除主體(可能還要用),只移到最上方手動刪除。介面函式宣告放標頭檔最下方,關注核心程式碼更容易。
Comment 為開關式多功能指令:無註解時產生模板、有註解時儲存隱藏、隱藏時調出閱讀修改、在 cpp/inl 檔也可調出註解、游標在類別宣告或上方操作類別註解。
註解項三部分:全自動處理(類別名、基類別名、檔名、函式名、原型)、必選項(類別/函式簡述、函式回傳值與參數)、可選項(如說明)。可選項增刪見後續章節。
產生模板時會分析:多載函式視為一個函式收集所有參數。類別模板中 [] 內的回傳型別或參數勿刪,註解加在後面。修改函式(加參數、加多載)可儲存後重新調出更新模板。
註解隱藏時實際儲存至 Doc\Doc.xml。修改後最好隱藏一次(儲存同步進行)。註解項以 ///$標籤名 開頭,換行第二行起用 ///,勿用 ///$ 或 //。長註解分多行寫,用 MultiLineComment 指令處理。文件顯示環境不同,原始碼分行文件會忽略。文件強制換行加 \r,換行並空一行加 \rr。
註解與函式宣告間不可有空行。儲存為 XML,內容與顯示分離。可自訂 XSL 顯示格式,作者提供工具採 MSDN 風格。文件顯示僅用 Doc.htm,腳本與 XSL 模板實現,IE 前進後退重整無法使用。
函式分類功能:同類函式宣告放在一起,第一個函式註解加 ///$分類:類名(中文分號),後續函式歸為此類直到定義新分類。參考 CShow 標頭檔與文件。
CommentDesc 作為最終程式碼CString m_strName; //RW 主角名字),調用後 GetName/SetName 自動產生註解(含簡述、回傳值、參數)。已修改儲存的註解不重新產生CommentDetail 和 CommentDesc「不相容」,互相隱藏對方顯示的註解。兩者皆為開關式,可讓原始檔完全無註解、顯示所有註解、或僅顯示摘要。
.inl 更不方便。CodeJump 一般不會找不到,依函式是否內聯自動跳 .cpp 或 .inl,.inl 到 .h 也良好。找不到時彈出視窗詢問是否跳轉CObject 子類別覆寫基類別虛擬函式。介面需填序號選函式,僅顯示函式名this 指標成員列表。VC 6.0 ListMembers 預設顯示全域成員,作者覺得預設顯示 this 成員較好。ThisList 刪除上一個 this-> 再插入新 this->,快捷鍵設為 Shift+Left Arrow,ListMembers 設 Shift+Right Arrow透過修改原始碼全域常數客製化。主要選項:
HppDir、CppDir、InlDir:檔案儲存目錄,可實現分目錄儲存。定義目錄務必在專案目錄下建立對應資料夾Mark_Desc(簡述)、Mark_Return(回傳)、Mark_Param(參數)、Mark_Cort(分類),可改英文Marks_Class、Marks_Function,可增刪改序NameLen、NameLang:標籤最長長度與語言(英文=1、中文=2)AssertGet、AssertSet、GetSetAll、AssertSentence:斷言與全介面產生選項(目前不建議改動)作者嘗試一種 C++ 程式設計觀念:類別封裝進一步擴大,將類別設計與實作完全分離。函式宣告、成員變數、建構/解構、有效性檢查、資料介面屬類別設計;其他功能函式實作屬類別實現,完全不接觸成員變數,透過 Get/Set 操作資料。設 AssertGet、AssertSet、GetSetAll 全為 True,類別實現全透過 Get/Set 讀寫,自動形成嚴密斷言網路,攔截難尋錯誤(「密集陣火炮攔截巡弋飛彈」)。有缺點,正在嘗試,不建議使用。
開發工具好不好用靠實際應用檢驗。發現問題或修改缺陷請在論壇發表,有建議別藏私。作者專門設小論壇收集問題建議,定期推出修正版。還有功能醞釀中(如團隊多人開發如何合併文件),有相關需求請提建議。