程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 介紹一款VC輔助開發工具VcExtend

介紹一款VC輔助開發工具VcExtend

編輯:關於VC++

VcExtend 擴展了VC6.0的功能,包括函數體批生成、數據接口自動生成,注釋可隱可現, 注釋自動生成文檔等功能,可以大大提高VC的工作效率。

VcExtend使用VC60的擴展宏接口 ,采用VBScript編寫,使用起來跟VC本身的命令幾乎沒有區別。VcExtend完全公開源代碼, 可以無償使用和修改。

下邊介紹幾個主要的命令:

建立新類:生成干淨清爽 的類框架,代碼模板可自由修改。

代碼整理:為函數聲明生成函數體,為成員變量生 成讀寫接口(包括聲明和實現),將函數體按聲明的順序重排序。這些操作一次性完成,無 論你是新設計一個類還是修改一個類,這個命令都會工作得很好。

注釋:生成注釋模 板,注釋可隱藏,函數體可調出頭文件寫的函數注釋進行閱讀和修改。注釋自動生成類似於 MSDN的文檔。文檔數據采用XML文件存儲,你可以按照自己的喜好定義顯示格式。

注 釋批處理:顯示/隱藏全部詳細注釋,顯示/隱藏注釋摘要,自動為數據接口函數生成注釋, 文檔整理理。

一、預備----開始!

當然,你要先下載VcExtend.rar。另外, 也需要安裝微軟的XML插件。

解包以後,可以看到Txt和Doc文件夾,Txt是一些生成新 類時使用的代碼模板,Doc文件夾存放由你的注釋生成的文檔和顯示文檔的工具。在你的工程 中使用VcExtend要把這兩個目錄拷到你的工程的根目錄下,後面的講解使用Example目錄下的 Demo工程,Txt和Doc文件夾已經在裡邊了。

VcExtend.dsm是VcExtend的源代碼,把它 拷貝到C:\Program FilesMicrosoft\ Visual Studio \ Common\ MSDev98\ Macros目錄下, 並把裡邊提供的命令掛接到工具欄上,就可以使用了。

如果你從沒用過VC60的擴展宏 ,可以照下邊的說明來操作。

啟動VC60,不要打開任何工程。

在Toos菜單選 擇Macro,點擊Options >>, 點擊Load Files,選中VcExtend前面的復選框,取消其 他選中的框。

點擊Toolbars標簽,新建一個工具條,命名為VcExtend。

點擊 Commands標簽,在Category下拉列表中選中Macros,Commands框裡就會顯示VcExtend的全部 命令。

選中ClassNew,拖到VcExtend工具條上,在彈出的對話框中選中Text Only, 你就會看到ClassNew命令已經掛到工具條上了。把其他命令也掛到工具條上。

為了便 於說明,我們先全部使用Text Only,以後,等你熟悉VcExtend後,可以把文字按鈕改為你喜 歡的圖標。

在Show Menus For下拉列表中選擇All Editors,點擊Close關閉對話框。

關閉VC60, 再重新打開。好啦,下面可以嘗嘗滋味如何了!

二、看一看,試 一試,味道怎麼樣?

啟動VC60, 打開Example目錄下的Demo工程。

這是 AppWidzard生成的SDI工程,全部使用缺省選項,只不過加了兩個類罷了。

讓我們先 來看一看。

打開CShow類的頭文件,是不是覺得代碼特別的清爽干淨?

再用浏 覽器打開Doc目錄下的Doc.htm文件。

如果你沒有安裝微軟XML插件,趕緊裝一個。我 用的是msxml3_cn。沒有這個可能無法看到文檔的效果。

你可以看到CShow的文檔了, 雖然這是隨便貼的一些文字,沒有實際意義,但如果是真正的工程,這個文檔就可以在編碼 、調試、維護的過程中發揮很大的作用,這些東西完全是由注釋自動生成的。CTaste類的文 檔還是空的,等一下由你來完成。

現在,我們再來試一試。請打開CTaste類的頭文件 ,這是一個什麼功能也沒有的類。

先試一下CodeCleanUp功能。

隨便寫兩個函 數的聲明,不要使用VC的Add Member Function功能,而是直接在頭文件上寫。如:

CString CreateNewObj(CString Name, int Age);

在private:下面加個幾成 員變量,也是直接在頭文件上寫。每個變量要獨占一行,並且,在要需要提供讀寫接口的變 量後面加上可讀寫標記,可讀的為//R,可寫的為//W,可讀寫的為//RW,只能加在注釋的最前 面,如:

private:

CString m_strName; //RW 對象的名字

int m_nAge; //R 對象年齡

CString m_strAddr; //W

寫完了吧?現在,點一下CodeCleanUp 按鈕。

把光標放到你的函數的聲明上,點擊CodeJump按鈕,怎麼樣?到了函數體了吧 ?再點一下CodeJump,又回到聲明這邊來了。

再看看頭文件的下方,注明R的函數生 成了Get函數,注明W的生成了Set函數,把光標移到這些函數的上面,點擊CodeJump,怎麼樣 ?函數體和實現都有了!

再用CodeJump跳回頭文件。我們只是走馬觀花一下,後面會 有更詳細的說明,現在先看看另一個主要功能:注釋!

把光標在一個函數的聲明上, 點擊Comment按鈕,函數上方會出來一個注釋模板。先不管這些注釋項是否符合你的要求,如 果需要,你可以修改的,以後再說。

在各注釋項上填一些內容,最好不要填垃圾文字 ,不想寫的話,從別的地方拷一些也行,比如說就從這篇說明書上拷一些文字。

再點 擊Comment按鈕,出問題啦,注釋不見了!不會丟了嗎?再點Comment,還好,又回來了。

用CodeJump跳到函數體。當你在寫函數實現時想看一下注釋怎麼辦?點一下Comment ,真棒,頭文件寫的注釋,源文件也可以查看,當然,修改也是可以的。

這是函數注 釋,類注釋有沒有?當然有了,還是這個Comment,只不過要先把光標放到類聲明或類聲明上 方。

在類注釋各項上填些文字,特別是簡述和說明兩項,多填一些,當然,內容可以 是隨便拷來的。

無論是函數注釋還是類注釋,寫完或修改後都要再點一下Comment, 並且,光標要放在注釋或函數上,當注釋隱藏了,才是保存了。

現在我們來看看你寫 的文檔。沒寫過文檔?剛才填的注釋就是了。

用浏覽器打開工程目錄下的Doc目錄下 的doc.htm,接下來,就隨便逛吧,反正,文檔很象MSDN,格式是我們大家都很熟悉的。

毛主席教導我們,要知道梨子的滋味,就得親口嘗一嘗。味道怎麼樣?如果你喜歡, 就繼續往下看,如果不喜歡,如果不喜歡,那麼......不會是真的吧?

三、丑話說在 前頭

如果你浏覽到了這裡,說明對VcExtend至少不反感。趁你高興,我可要把一些問 題先交代清楚。

這是使用VC提供的宏功能和幾個組件,用VBScript寫的東東,語言的 功能比較有限,並且,我對VBScript也不太熟,有些地方可能寫得比較爛。

最糟的是 出錯處理,比如我想打開一個文件,使用Documents.Open函數,這個函數沒有返回值,如果 文件不存在,它不會告訴我不存在,而是造成一個致命的內存錯誤,可能導致VC要整個退出 。哪位知道有沒有解決辦法啊?

當然,你不要害怕,這也沒什麼大不了的。如果你新 建了一個工程,要使用VcExtend功能,千萬記住要把Doc和Txt兩個文件夾拷到工程的目錄下 ,和Debug和res目錄並列,如果你忘了的話,我以我的人格擔保:一定會出問題的。

如果修改了VcExtend的源代碼,最好把VC退出後再重新打開,要不然也可能產生與上邊所說 相似的內存錯誤。

出了上述的問題後,如果在win2000環境下,最好注銷再登錄。

還有一個問題是,由於語言所限,考慮到效率和性能,無法對代碼進行復雜的詞法分 析,所以代碼要比較規范,當然也不太特別,都是非常普通的編碼規范,只要做到了下面幾 點就行:

一是每個類一定要有構造函數,並且放在最上面,構造函數上方的代碼將不 作處理,你可以把內置的數據類型,如enum,struct或嵌套類什麼的,放在構造函數的上邊 。

二是每個成員變量的聲明要獨占一行,是指頭文件的成員變量,函數體內的東西, VcExtend是完全不管的。

三是如果要寫額外的注釋,不能使用/**/,要使用//。

存在的主要問題,大概就這些了吧。如果你發現了什麼問題,請在論壇發表,我將盡 力解決。

另外要說明的是,Inline函數的實現放在.inl文件中,所以一個類有三個文 件。這是自動處理的,可不敢給你添麻煩。CodeJump的良好跳轉功能,會讓你感覺不到多了 個文件。

雖然還有一些問題,但我覺得VcExtend還是挺好用的,能提高工作效率十分 之N。我向你推薦它,就表示這個東東不錯,因為,我覺得不好的東西,是從來不會給人的, 比如說,我從來不會隨便送錢給人家,因為,我知道,金錢是骯髒的東西。

四、與清 爽干淨的代碼為伴----類框架生成

如果你象我一樣,喜歡清爽干淨的代碼,那麼,用 ClassNew來生成新類是一個不錯的選擇,尤其是生成CObject的子類。

先用一下試試 ,點擊ClassNew,在輸入框中輸一個類名:CMyClass,確定,感覺怎麼樣?

ClassNew 很簡單易用,但還是有一些需要說明的。

首先是一些可選項,請根據你的需要來填寫 ,如繼承自某一個類的,就加:BaseName,不指定則會認為以CObject為基類;要指定文件名 ,就加#FileName,不能有後綴,因為.cpp和.h和.inl都會共用這個文件名,不指定則會以類 名去掉前綴C作為文件名,我主張不指定為好;至於目錄名,現在不理它吧,很少用,以後會 提到的;最後就是宏選項了,如果是可序列化的類,就加/S,消息類就加/M,加了這些選項 就會生成相應的宏。除了類名在最前面外,所有的選項都不需要考慮輸入的順序。

你 還可以修改代碼模板,Txt目錄下的cpp.txt,hpp.txt,inl.txt就是生成新類框架的模板,可 以按自已的喜好來修改。

ClassNew有一個顯著的缺陷,就是生成的類不會自動加入工 程,也不會加入到ClassWizard中,要使用Project->Add To Project->Files功能手工 把它加入工程,如果要加入到ClassWizard中,可以刪掉工程的.clw文件,再重新編譯。一個 更簡單的辦法是,先用VC的New CLass功能生成一個類,再用ClassNew重新生成一遍,這樣就 不會有這些缺陷了。

不是使用ClassNew生成的類,也完全可以使用VcExtend的功能, 只不過首次使用的時候會要求你輸入類名和基類名而已,唯一的問題是代碼跳轉,偶爾可能 會找不到,不過很少見。

如果你用VC的AppWizard新建了一個工程,想把VC生成的代 碼改為用ClassNew來生成,也很簡單的。先把工程另存一份,並啟動另一個VC打開另存的工 程。用ClassNew重新生成各個類,並從另存的工程中把所缺少的代碼拷過來。最好是先拷頭 文件的代碼,拷完後點一下CodeCleanUp生成函數體,再拷函數體的內容。每做完一個類後編 譯並運行工程看有沒有問題,沒問題再做下一個類。APP類千萬不要忘了拷CMyApp theApp這 一行。

五、生成函數體與數據接口----好用的代碼完成功能

雖然Rose的代碼 生成功能不錯,但附加的無數的注釋卻讓我深惡痛絕,最後還是決定不用它生成的代碼。我 希望做一個簡單的工具,可以先進行類設計,然後自動生成代碼框架,修改了類設計後還可 以很方便地在不影響有效代碼的前提下重新生成代碼框架,當然,不能有很多的附加注釋! CodeCleanUp就是這樣子的一個工具!

使用CodeCleanUp,你可以先寫頭文件,把所有 的函數聲明和成員變量都寫出來,然後一下子就把函數體和數據接口生成了。

CodeCleanUp主要有三個功能,一是函數體生成,二是數據接口函數生成,三是函數 體按聲明的順序重排序。不管你的頭文件寫了多少或修改了多少,CodeCleanUp都會很好的工 作。

要提供公共接口的成員變量,只要在注釋上加上讀寫標記就行,只讀為//R,只 寫為//W,可讀寫為//RW,這樣,你自己可以對哪些成員變量是可讀寫的一目了然,而 CodeCleanUp會根據這些標記生成公共數據接口。任何時候,你都可以修改讀寫標記,然後點 擊CodeCleanUp,都會自動生成或刪除接口函數。

接口函數默認的命名規則是Get或 Set加上去掉前綴的變量名,如果不喜歡,可以修改,參見後面的關於可選項的章節。

接口函數的實現代碼也是自動生成的,一般情況下可以直接使用,當然你也可以修改 它。

接口函數都是內聯的,實現在.inl文件裡,你可以使用CodeJump方便的在聲明與 實現之間跳轉。

除了接口函數外,其他函數也可以聲明為內聯,只要在聲明的最前面 加inline,CodeCleanUp就會把它生成到.inl文件中去,但函數體裡的實現代碼當然不會象接 口函數一樣自動生成了,可以使用CodeJump跳過去寫自己的代碼。

要刪除一個或一些 函數,只要刪掉聲明後運行CodeCleanUp就行,接口函數則只需修改成員變量的讀寫標記。內 聯函數一般都是很簡單的,所以刪除時會完全刪掉,但普通函數則不會刪除函數體,因為裡 邊的代碼說不定你還要用呢,所以只會把它移到最上邊,要手工刪掉才行。

CodeCleanUp會把接口函數的聲明放在頭文件的最下邊,這樣你所要關注的代碼就少 了很多,可以把注意力放在最重要的代碼上。

六、讓你愛上寫注釋----注釋可隱可現 ,文檔自動生成

Comment會讓你覺得寫注釋是一件讓人愉快的事情。

Comment 的基本用法已經在前面說過了。它是一個開關式的多功能的命令,當你光標下的函數還沒有 注釋時,使用它會生成注釋模板,當已經有注釋時,使用它會保存並隱藏注釋,當你的函數 已有注釋但隱藏了時,會調出注釋供你閱讀和修改,當你在編輯cpp或inl文件時,也可以用 它調出注釋來查看或修改,當你的光標在頭文件的類聲明行或其上方的任一行時,操作的就 是類注釋!

注釋項分為三部份,一是全自動處理的,完全不用理會它。包括:類注釋 的類名,基類名,文件名;函數注釋的函數名,函數原形,這部分不會在源文件中顯示出來 ,但可以在文檔中顯示。二是必選項,包括類注釋的簡述,函數注釋的簡述,簡述就是最簡 單的功能描述,如果連這個都不寫的話,你這個注釋也就沒什麼意義了。函數注釋的返回值 和參數項也屬於這一類,但不寫這兩項注釋還比較無所謂。三是可選項,你可以增刪一些項 目,如說明就是可選的。可選項的增刪方法參見後面的關於選項的章節。

生成注釋模 板時,Comment並不是直接貼個模板了事,而是先進行了一些分析的。重載函數會當作一個函 數,所有的參數都會收集起來。如果你為多個重載函數寫了多份注釋,後保存的就會覆蓋先 保存的。同名的函數,即使不是連續聲明,也會當作重載函數。

類模板中的[]內的返 回類型或參數,千萬不要刪掉它。你的注釋加在它後面就是了。用空格隔開比較好看一些。

如果你修改了函數,如加了參數,或加了重載的函數,可以把當前的注釋保存,再調 出來,就會把新加的參數加入模板。

當注釋隱藏時,實際上是保存到Doc目錄下的 Doc.xml文件上去了。隱藏和保存是同時進行的,所以修改後最好隱藏一下,雖然你不隱藏, 注釋還在你的源文件上,不會丟失,但當你在cpp文件上打開相應的注釋時,只會調出已經保 存過的內容,並且,沒保存的注釋不會出現在文檔上。這些操作,可以使用注釋批處理功能 ,參見後續章節。

每一個注釋項都是以///$加標簽名開頭的,如果要換行,從第二行 開始,要用///開頭,千萬不要用///$,否則會當作是一個新的項,也不要用//開頭,否則會 認為格式不規范而拒絕存入。如果注釋較長,應該分多行來寫,就象代碼一樣。多行注釋可 以先寫成普通文字,寫完後用MultiLineComment命令來處理。因為注釋是要用來生成文檔的 ,而文檔的顯示環境與在源文件中不一樣,寫注釋時的分行,文檔中會忽略。如果分檔中要 強制分行,必須加r,要強制分行並空一行,就加rr。下面是一個多行注釋項的例子:

///$說明:
///這是第一行,
///這是第二行,在文檔中不會強制換行。
///\r這是第二段,在文檔中會強制換行,但\r不會顯示出來。
///\r\r這是第三段,在文檔中會在前面插一個空行。

寫完以後選中注釋,注意不要選中///$ 那一行,點擊MultiLineComment,就會按標准格式排版。保存前是什麼樣子的注釋,以後調 出來還是什麼樣子。

注釋與函數聲明(或類注釋與類聲明)之間不能有空行。

注釋將存成XML文件,這樣內容和顯示可以完全分開。如果你對XML比較熟悉,可以定 義自己的XSL文件來顯示文檔。不過,使用我寫的文檔顯示工具也不錯啊,雖然我對XML不熟 悉,但是費了很多心血的。考慮到VC程序員比較習慣MSDN的風格,所以基本上是按照MSDN的 格式來顯示文檔的,如果你喜歡漂亮一點,可以加一些配色或圖片。

文檔的顯示其實 只使用一個文件Doc.htm,具體內容完全是用腳本和xsl模板來實現的,所以IE的前進後退刷 新之類的功能無法使用。

還有一個不錯的功能:你也可以象MSDN一樣,對函數進行分 類。同一類的函數的聲明要放在一起,並且在每類的第一個函數的注釋上加分類這一項。用 手工加上這一項

///$分類:類名

注意是中文的分號。象訪問控制符一樣,後 面的函數都會當作是這一類的,直到定義了另一個分類。同一類的函數只能在第一個加分類 這個注釋項,如果你定了多個同名的類,我可不幫你合並。如果不明白,打開CShow類的頭文 件,點擊CommentDetail調出全部注釋,可以很清楚的看到是如何將函數分類的,再看一下 CShow的文檔,可以看到分類的效果。

後面還提供一些自動化功能,幫你高效地處理 注釋和文檔。

七、注釋批處理的魔法----省時高效、隨心所欲

注釋批處理包 括四個命令,它們幫你隨心所欲地擺弄注釋,並盡可能節省時間。

CommentDetail 顯 示/隱藏全部注釋。這個很簡單,試用一下就知道了。

CommentDesc 顯示/隱藏注釋摘 要。這個功能會把所有函數注釋的簡述部份作為普通注釋加在函數聲明後面。這樣有兩方面 的作用,一是幫助讀者快速的理解類的功能,避免了注釋隱藏後完全沒有注釋的極端,也不 會讓大量的注釋掩沒了有效的代碼,第二呢,猜到了嗎?這是供VC調用的,就是在對象成員 列表中彈出函數注釋。怎麼樣?想得很細吧。我的建議是,當一個類的代碼完成後,就調用 CommentDesc,然後作為最終代碼保存。

CommentDetail和CommentDesc是“不兼 容”的,互相都會把對方顯示的注釋先隱藏掉,以避免太多的注釋。兩者都是開關式的 ,使用它們,你可以很方便地讓你的源文件完全沒有注釋(成員變量除外),顯示全部注釋 ,或是只顯示注釋摘要。

值得注意的一點是,CommentDesc僅僅是顯示注釋摘要,在 這裡作修改,是無法保存到文檔中去的。

AttributeComment 為成員變量的讀寫接口 生成注釋。如果你給的成員變量寫了注釋,如: CString m_strName; //RW 主角的名字。 並調用AttributeComment,那麼GetName和SetName函數都會自動生成注釋,即使你還沒有調 用CodeCleanUp生成GetSet函數。注釋包括簡述和返回值注釋和參數注釋。生成的注釋也許並 不太合你的心意,但是修改它總比完全重新寫它要省時得多。生成的注釋會直接保存到文檔 ,而不會在源文件中顯示出來,可以調用CommentDetail全部調出來並修改它。不管有多少成 員變量,都會一次性生成注釋。已經修改並保存的注釋,不會重新生成,以免刪掉了你的工 作成果。

DocCleanUp 文檔整理,這個功能會把多余的文檔刪掉,比如說函數已經刪 除了,調用這個命令就會把相關的文檔刪除。另外,這個命令會把文檔按函數聲明的順序重 排序。如果你看到文檔有些混亂,就調用這個命令試一下。

八、還有一些小玩意,喜 歡嗎?

CodeJump:代碼跳轉;

VirtualFunction:為CObject的子類覆蓋基類 的虛函數;

ThisList:顯示this指針的成員列表。

VC60的代碼跳轉功能,常 常找不到,並且也沒有方便的頭文件源文件之間的跳轉命令,加了一個.inl文件之後,就更 不方便了,所以我寫了一個自己的跳轉命令CodeJump。

函數聲明和函數實現的相互跳 轉,跟VC的跳轉命令差不多,但CodeJump一般不會找不到。

CodeJump還會根據函數是 否內聯,來自動跳到.cpp或.inl文件,.inl到.h的跳轉也工作良好。

如果找不到, CodeJump會彈出一個窗口,問你是否跳轉到相應的文件,它會根據函數是否內聯來判斷哪個 文件是你的可能目標。

如果你只是想作文件的跳轉,可以把光標放在空行或注釋上行 上,點擊CodeJump,就會進行文件的跳轉。如果你工作在頭文件上,想跳到.cpp文件,光標 就放到//!begin get/set這一行的上方,如果想跳到.inl文件,光標就放到//!begin get/set的下方。

VC60中為MFC的子類顯示基類有哪些可覆蓋函數,自定義的CObject 子類就沒有這個功能了,VirtualFunction可以彌補這個小缺陷。它的界面有點惡心,要填序 號來選函數,並且只顯示函數名。別罵我做得不好,VBScript就提供InputBox這麼一個輸入 工具,我容易嗎我?

我一直很奇怪VC60的ListMembers命令為什麼做成默認是顯示全 局成員,而不是顯示this指針的成員,有一個::來顯示全局成員了,默認顯示this指針的成 員不是很好嗎?害我每次都要寫一個this->,然後又要刪掉它。ThisList就是用來顯示 this指針成員的。這個命令也做得不好,要調用ThisList,再調用VC60的ListMembers命令才 能調出成員列表,我在ThisList宏的最後加了ExecuteCommand "ListMembers"語 句,但卻不起作用。ThisList實際上只是刪掉代碼中的上一個this->,再在光標位置插入 一個this->。我把ThisList的快捷鍵設為Shift + Left Arrow,把ListMembers的快捷鍵 設為Shift + Right Arrow,這樣按住shift再按左右箭頭就出來了。開頭感覺不是很爽,習 慣了覺得也不錯,總比寫一個this->,然後又刪掉它好些。請注意,如果你的代碼中有 Isthis->這樣的字符,ThisList會把其中的this->刪掉,不過這種代碼出現的可能性 很小,並且編繹時也很容易發現的。

九、可選項----定制你的VcExtend

你可 以通過對源代碼的一些全局常量進行修改來使VcExtend更適合你的習慣或開發組的規范。源 代碼中已對這些全局常量加了注釋,很容易理解的,這裡只對其中的幾個可選項加一些說明 。

HppDir = "" ’ "Hpp" ’Hpp文件的存儲目錄, 如果不為"",一定要加

CppDir = "" ’ "Cpp" ’Cpp文件的存儲目錄,如果不為"",一定要加

InlDir = "" ’ "Hpp" ’Inl文件的存儲目錄,如 果不為"",一定要加

一個工程裡文件較多時可能要分目錄存儲,修改上面 的存儲目錄即可實現分目錄存儲。如果定義了存儲目錄,一定要在工程目錄下建立這些目錄 ,如果忘了,就會產生第三節所說的內存錯誤。如果把InlDir設為等於HppDir,inl文件就會 和.h文件放在一起。

關於目錄,還有一點要說明的。生成新類的時候,有一個目錄選 項,所填目錄不包括上述的存儲目錄的部份。比如HppDir="Hpp", CppDir="Cpp", InlDir=HppDir,生成新類時加了目錄名@Views,那麼cpp文件會 存到CppViews目錄下,而hpp和inl文件會存到HppViews目錄下。並且,一定要先建好Views目 錄!!!

Mark_Desc = "簡述" ’注釋標簽,修改了這些項則必須對 Doc目錄下的.xsl文件作相同修改。

Mark_Return = "返回" ’

Mark_Param = "參數" ’

Mark_Cort = "分類 " ’

這些是注釋的必選項,你可以改變標簽名字,比如說改為英文。我喜 歡用中文,因為英文長短不一。

Marks_Class = "版權/作者/初建/修改/說明 " ’可選類注釋項,修改則須修改.xsl文件

Marks_Function = "說 明" ’可選函數注釋項

這些是注釋的可選項,你可以隨便增刪或改為英文 ,也可以按自己的喜好或開發規范重新排序。

NameLen = Len(Mark_Desc) ’等 於上面的最長的標簽的Len

NameLang = 2 ’標簽的語言,英文為1,中文 2

如果你改變了標簽,這兩個變量也要做相應改變,否則注釋會很難看,存入時還可 能讀錯。

下面的可選項目前不推薦改動,有興趣的話可以看看。

AssertGet = False ’是否在所有的讀函數中加斷言語句

AssertSet = False ’是否在 所有的寫函數中加斷言語句

GetSetAll = False ’是否為所有的成員變量生成 讀寫函數

AssertSentence = "ASSERT_VALID(this);" ’斷言語句的 內容

前面已經說過,用//RW來標記成員變緊是否可讀寫,標記為//RW的成員變量會生 成public:的讀寫接口。

如果你把GetSetAll設為True,VcExtend就會為所有的成員變 量生成數據讀寫函數,其中,有可讀寫標記的成員變量會生成public:的讀寫函數,而其他讀 寫函數的訪問控制符與成員變量一致。有點迷糊吧?看看例子:

protected:
CString m_strName; //R
private:
int m_nAge; //W
CStrign m_strAddr;

 

如果GetSetAll設為True,則會生成:

public:
CString GetName() const;
void SetAge(int Age);
protected:
void SetName(const CString& Name);
private:
int GetAge() const;
CStrign* GetAddr();
void SetAddr(const CStrign& Addr);

 

可 以看出,公共的讀寫接口還是一樣的,那麼protected和private的讀寫函數有什麼意義嗎?

我正在嘗試一種C++編程觀念:類的封裝可以進一步擴大,將類設計和類實現完全分 開,函數聲明、成員變量、構造與析構及對象有效性檢查、數據接口均屬於類設計,其他功 能函數的實現屬於類實現,類實現完全不接觸成員變量,而是通過數據讀寫函數來操作數據 。這樣做有一些很吸引人的好處,比如說AssertGet、AssertSet、GetSetAll全部設為True, 類實現中全部通過GetSet函數來讀寫成員數據,那麼將自動形成嚴密的斷言網絡,可以攔截 很多很難查找的錯誤,照我的說法,是用密集陣火炮攔截巡航導彈。當然,這是指 AssertValid函數已經實現得很好。

還有其他好處,但也有一些缺點,我正在嘗試使 用,有興趣的朋友可以一起探討,目前不推薦。

十、如果VcExtend對你有用,請跟我 一起完善它

跟開發工具有關的東西,是否有用好用,要靠實際應用中來檢驗。如果你 發現了什麼問題,或修改了其中的某些缺陷, 請在論壇中發表。如果你有建議,更不要藏私 啊。我專門搞了個小論壇,就是為了收集各種問題和建議,過一段時間,我會推出修改後的 版本。

還有一些功能正在醞釀中,比如小組中多人各自開發,如何合並文檔等等。你 如果有什麼相關需求,請當作建議提出來。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved