青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

socketref,再見!高德

https://github.com/adoggie

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用鏈接

留言簿(54)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

Doxygen是基于GPL的開源項目,是一個非常優(yōu)秀的文檔系統(tǒng),當前支持在大多數(shù)unix(包括linux),windows家族,Mac系統(tǒng)上運行,完全支持C++, C, Java, IDL(Corba和Microsoft 家族)語言,部分支持PHP和C#語言,輸出格式包括HTML、latex、RTF、ps、PDF、壓縮的HTML和unix manpage。有很多開源項目(包括前兩篇文章介紹的log4cpp和CppUnit)都使用了doxygen文檔系統(tǒng)。而國內(nèi)的開發(fā)人員卻使用的不多,這里從開發(fā)人員使用的角度介紹這個工具,使開發(fā)人員用最少的代價盡快掌握這種技術(shù),并結(jié)合這個工具探討如何撰寫注釋的問題。以下以linux下的C+ +語言為例進行介紹,以下討論基于doxygen1.3.3。

1. doxygen使用步驟
由于只是工具的使用,這里不介紹它的原理,直接從使用步驟開始。Doxygen的使用步驟非常簡單。主要可以分為:
 1)第一次使用需要安裝doxygen的程序
 2)生成doxygen配置文件
 3)編碼時,按照某種格式編寫注釋
 4)生成對應(yīng)文檔
doxygen的安裝非常簡單, linux下可以直接下載安裝包運行即可,下載源代碼編譯安裝也是比較通用的編譯安裝命令。請參考其安裝文檔完成安裝。

Doxygen在生成文檔時可以定義項目屬性以及文檔生成過程中的很多選項,使用下面命令能夠產(chǎn)生一個缺省的配置文件:
doxygen -g  [配置文件名]
可以根據(jù)項目的具體需求修改配置文件中對應(yīng)的項,具體的修改過程在下面介紹。修改過的配置文件可以作為以后項目的模板。

讓doxygen自動產(chǎn)生文檔,平常的注釋風格可不行,需要遵循doxygen自己的格式。具體如何寫doxygen認識的注釋在第3節(jié)詳細介紹。

OK,代碼編完了,注釋也按照格式寫好了,最后的文檔是如何的哪?非常簡單,運行下面的命令,相應(yīng)的文檔就會產(chǎn)生在指定的目錄中。
  doxygen [配置文件名]

需要注意的是doxygen并不處理所有的注釋,doxygen重點關(guān)注與程序結(jié)構(gòu)有關(guān)的注釋,比如:文件、類、結(jié)構(gòu)、函數(shù)、變量、宏等注釋,而忽略函數(shù)內(nèi)變量、代碼等的注釋。

2. doxygen配置文件
doxygen配置文件的格式是也是通常的unix下配置文件的格式:注釋'#'開始;tag = value [,value2…];對于多值的情況可以使用 tag += value [,value2…]。

對doxygen的配置文件的修改分為兩類:一種就是輸出選項,控制如何解釋源代碼、如何輸出;一種就是項目相關(guān)的信息,比如項目名稱、源代碼目錄、輸出文檔目錄等。對于第一種設(shè)置好后,通常所有項目可以共用一份配置,而后一種是每個項目必須設(shè)置的。下面選擇重要的,有可能需要修改的選項進行解釋說明,其他選項在配置文件都有詳細解釋。

TAG 缺省值 含義
PROJECT_NAME  項目名稱
PROJECT_NUMBER  可以理解為版本信息
OUTPUT_DIRECTORY  輸出文件到的目錄,相對目錄(doxygen運行目錄)或者絕對目錄
INPUT  代碼文件或者代碼所在目錄,使用空格分割
FILE_PATTERNS *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.h++ *.idl *.odl 指定INPUT的目錄中特定文件,如:*.cpp *.c *.h
RECURSIVE NO 是否遞歸INPUT中目錄的子目錄
EXCLUDE  在INPUT目錄中需要忽略的子目錄
EXCLUDE_PATTERNS  明確指定的在INPUT目錄中需要忽略的文件,如:FromOut*.cpp
 
OUTPUT_LANGUAGE English 生成文檔的語言,當前支持2、30種語言,國內(nèi)用戶可以設(shè)置為Chinese
USE_WINDOWS_ENCODING YES(win版本)
NO(unix版本) 編碼格式,默認即可。
EXTRACT_ALL NO 為NO,只解釋有doxygen格式注釋的代碼;為YES,解析所有代碼,即使沒有注釋。類的私有成員和所有的靜態(tài)項由EXTRACT_PRIVATE和 EXTRACT_STATIC控制
EXTRACT_PRIVATE NO 是否解析類的私有成員
EXTRACT_STATIC NO 是否解析靜態(tài)項
EXTRACT_LOCAL_CLASSES YES 是否解析源文件(cpp文件)中定義的類
SOURCE_BROWSER NO 如果為YES,源代碼文件會被包含在文檔中
INLINE_SOURCES NO 如果為YES,函數(shù)和類的實現(xiàn)代碼被包含在文檔中
ALPHABETICAL_INDEX NO 生成一個字母序的列表,有很多類、結(jié)構(gòu)等項時建議設(shè)為YES
GENERATE_HTML YES 是否生成HTML格式文檔
GENERATE_HTMLHELP NO 是否生成壓縮HTML格式文檔(.chm)
GENERATE_LATEX YES 是否乘車latex格式的文檔
GENERATE_RTF NO 是否生成RTF格式的文檔
GENERATE_MAN NO 是否生成man格式文檔
GENERATE_XML NO 是否生成XML格式文檔
 

3. doxygen注釋
3.1 注釋風格
下面是工作量最大部分,安裝doxygen格式寫注釋。通常代碼可以附上一個注釋塊來對代碼進行解釋,一個注釋塊由一行或者多行組成。通常一個注釋塊包括一個簡要說明(brief)和一個詳細說明(detailed),這兩部分都是可選的。可以有多種方式標識出doxygen可識別的注釋塊。
1)JavaDoc類型的多行注釋。
/**
 *  ….text….
 */
2)QT樣式的多行注釋。
/*!
….text….
 */
3) /// …text….
4) //! …text….
簡要說明有多種方式標識,這里推薦使用@brief命令強制說明,例如:
/**
 * @brief [some brief description ]
 *      [ brief description more. ]
 *
 * [some more detailed description…]
 */
以上這些注釋格式用來對緊跟其后的代碼進行注釋。doxygen也允許把注釋放到代碼后面,具體格式是放一個'<'到注釋開始部分。例如:
int var1 ; /**< ….text…. */
int var2; ///< ….text….

注釋和代碼完全分離,放在其他地方也是允許的,但需要使用特殊的命令加上名稱或者聲明進行標識,比如:class、struct、union、 enum、fn、var、def、file、namespace、package、interface(這些也就是doxygen關(guān)注的注釋類型)。這里不推薦使用,建議注釋盡量放在代碼前后。具體使用方式參見doxygen手冊。

3.2 doxygen常用注釋格式
通常的選擇上面的一、兩種注釋風格,遇到頭文件中各種類型定義,關(guān)鍵變量、宏的定義,在其前或者后使用 @brief 定義其簡要說明,空一行后繼續(xù)寫其詳細的注釋即可。

對函數(shù)的注釋,是比較常常需要注釋的部分。除了定義其簡要說明以及詳細注釋,還可以使用param命令對其各個參數(shù)進行注釋,使用return命令對返回值進行注釋。常見的格式如下:
/**
 *@brief func's brief comment.
 *
 * Some detailed comment.
 *@param a [param a 's comment.]
 *@param b [param b 's comment.]
 *@exception std::out_of_range [exception's comment.]
 *@return [return's comment.]
 */
int func1(int a, int b);

進行設(shè)計時,通常有模塊的概念,一個模塊可能有多個類或者函數(shù)組成,完成某個特定功能的代碼的集合。如何對這個概念進行注釋?doxygen提供了group的概念,生成的模塊的注釋會單獨放在一個模塊的頁面中。使用下面的格式定義一個group。
/** [group_name] [brief group description ]
 * detailed group description ]
 * @{
*/
code
/** @} */
group中的代碼可以有自己的注釋。單純定義一個模塊,去除{ 和}命令即可。任何其他代碼項(比如類、函數(shù)、甚至文件)如果要加入到某個模塊,可以在其doxygen注釋中使用ingroup命令即可。Group之間使用ingroup命令,可以組成樹狀關(guān)系。
/** @file util.cpp
* @ingroup [group_name]
 * @brief file's brief info.
 */
把多個代碼項一起添加到某個模塊中可以使用addtogroup命令,格式和defgroup相似。

對于某幾個功能類似的代碼項(比如類、函數(shù)、變量)等,如果希望一起添加注釋,而又不想提升到模塊的概念,可以通過下面的方式:
//@{
/** Comments for all below code. */
code…
//@}
對這種組進行命名可以使用name命令。此時中間代碼可以有自己的注釋。如:
/** @name group_name
 * description for group.
 */
//@{
code…
//@}

3.3 doxygen常用注釋命令
doxygen通過注釋命令識別注釋中需要特殊處理的注釋,比如函數(shù)的參數(shù)、返回值進行突出顯示。上面也提到了一些注釋命令(如:brief、param、return、以及group相關(guān)的命令),下面對其他一些常用的注釋命令進行解釋說明。
@exception <exception-object> {exception description} 對一個異常對象進行注釋。
@warning {warning message } 一些需要注意的事情
@todo { things to be done }  對將要做的事情進行注釋
@see {comment with reference to other items } 一段包含其他部分引用的注釋,中間包含對其他代碼項的名稱,自動產(chǎn)生對其的引用鏈接。
@relates <name> 通常用做把非成員函數(shù)的注釋文檔包含在類的說明文檔中。
@since {text} 通常用來說明從什么版本、時間寫此部分代碼。
@deprecated
@pre { description of the precondition } 用來說明代碼項的前提條件。
@post { description of the postcondition } 用來說明代碼項之后的使用條件。
@code 在注釋中開始說明一段代碼,直到@endcode命令。
@endcode 注釋中代碼段的結(jié)束。

到此為止,常用的doxygen的注釋格式討論完畢,我們能夠按照一定的格式撰寫doxygen認識的注釋,并能夠使用doxygen方便快捷的生成對應(yīng)的文檔,不過注釋中應(yīng)該寫些什么,如何撰寫有效的注釋可能是困擾開發(fā)人員的一個更深層次的問題。

4. 注釋的書寫
注釋應(yīng)該怎么寫,寫多還是寫少。過多的注釋甚至會干擾對代碼的閱讀。寫注釋的一個總的原則就是注釋應(yīng)該盡量用來表明作者的意圖,至少也應(yīng)該是對一部分代碼的總結(jié),而不應(yīng)該是對代碼的重復(fù)或者解釋。對代碼的重復(fù)或者解釋的代碼,看代碼可能更容易理解。反映作者意圖的注釋解釋代碼的目的,從解決問題的層次上進行注釋,而代碼總結(jié)性注釋則是從問題的解答的層次上進行注釋。

推薦的寫注釋的過程是首先使用注釋勾勒出代碼的主要框架,然后根據(jù)注釋撰寫相應(yīng)的代碼。對各種主要的數(shù)據(jù)結(jié)構(gòu)、輸出的函數(shù)、多個函數(shù)公用的變量進行詳細地注釋。對代碼中控制結(jié)構(gòu),單一目的的語句集進行注釋。下面是一些寫注釋時需要注意的要點:
  避免對單獨語句進行注釋;
  通過注釋解釋為什么這么做、或者要做什么,使代碼的讀者可以只閱讀注釋理解代碼;
  對讀者可能會有疑問的地方進行注釋;
  對數(shù)據(jù)定義進行注釋,而不是對其使用過程進行注釋;
  對于難于理解的代碼,進行改寫,而不要試圖通過注釋加以說明;
  對關(guān)鍵的控制結(jié)構(gòu)進行注釋;
  對數(shù)據(jù)和函數(shù)的邊界、使用前提等進行注釋;

5. 參考資料
 1. doxygen homepage
 http://www.stack.nl/~dimitri/doxygen/

 2. doxygen manual
 http://www.stack.nl/~dimitri/doxygen/manual.html

 3. Code Complete: A Practical Handbook of Software Construction. Redmond, Wa.: Microsoft Press, 880 pages, 1993. ISBN: 1-55615-484-4.
 
 4. 簡介doxygen
 http://www.stack.nl/~dimitri/doxygen/doxygen_intro_cn.html
 
 5. 10 Minutes to document your code
 http://www.codeproject.com/tips/doxysetup.asp

 6. 使用doxygen
 http://www.csdn.net/Develop/article/16%5C16383.shtm
posted on 2008-07-04 01:20 放屁阿狗 閱讀(1867) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区乱码aⅴ| 欧美日韩国产天堂| 亚洲尤物在线| 老牛嫩草一区二区三区日本| 亚洲一区二区三区在线观看视频| 久久免费少妇高潮久久精品99| 亚洲欧美日本国产有色| 欧美日韩999| 亚洲国产成人久久综合| 国产一区清纯| 午夜亚洲性色视频| 亚洲欧美国产不卡| 欧美日韩国产一区二区三区地区| 免费观看一级特黄欧美大片| 国产视频丨精品|在线观看| 中国成人亚色综合网站| 亚洲午夜精品在线| 欧美日韩在线三级| 一本色道久久加勒比精品| 亚洲伦理在线| 欧美日本在线一区| 亚洲精品视频在线播放| 一区二区精品在线| 欧美精品一区二区久久婷婷| 亚洲国产精品成人va在线观看| 亚洲国产91精品在线观看| 久久综合一区二区| 欧美成人免费大片| 亚洲美女诱惑| 欧美日韩国产高清| 制服丝袜亚洲播放| 午夜精品一区二区三区四区| 国产精品资源在线观看| 香蕉国产精品偷在线观看不卡| 午夜亚洲精品| 国产主播精品在线| 久久在线播放| 亚洲精品久久久久久久久久久久久| 亚洲精品久久久蜜桃| 欧美日韩美女| 亚洲综合社区| 欧美不卡在线| 99精品视频免费观看| 欧美日韩一区成人| 午夜亚洲视频| 亚洲第一区在线观看| 一区二区三区高清在线| 国产精品视频男人的天堂| 久久不射网站| 亚洲精华国产欧美| 午夜精品在线视频| 亚洲高清不卡av| 欧美激情a∨在线视频播放| 一片黄亚洲嫩模| 久久一综合视频| av不卡在线观看| 国产亚洲一二三区| 欧美激情一区二区三区在线视频观看| 一区二区三区黄色| 久久永久免费| 亚洲综合激情| 亚洲国产欧美一区二区三区久久| 欧美精品成人91久久久久久久| 亚洲网在线观看| 欧美国产综合视频| 久久岛国电影| 一区二区三区精品| 在线视频观看日韩| 国产精品自拍网站| 欧美国产综合视频| 久久精品一本久久99精品| 日韩一本二本av| 久久久久这里只有精品| 亚洲美女视频网| 韩国免费一区| 国产精品国产三级国产专播品爱网| 久久久精品日韩欧美| 亚洲一区二区三区精品动漫| 欧美成人精品激情在线观看| 小黄鸭视频精品导航| 日韩一级黄色片| 亚洲国产女人aaa毛片在线| 国产欧美日韩一区二区三区在线观看 | 黄色亚洲在线| 国产精品久久一区二区三区| 欧美成年人视频| 久久婷婷国产综合精品青草| 亚洲欧美激情精品一区二区| 9久草视频在线视频精品| 牛牛国产精品| 久久久久久一区二区| 午夜久久资源| 亚洲你懂的在线视频| 99热免费精品| 日韩亚洲欧美高清| 亚洲欧洲日韩女同| 亚洲国产精品悠悠久久琪琪| 国产婷婷色一区二区三区在线| 国产精品超碰97尤物18| 欧美日韩国产一级| 欧美日韩一级黄| 欧美aⅴ99久久黑人专区| 久热精品在线视频| 久久亚洲精选| 老鸭窝毛片一区二区三区| 久久久精品一区| 久久久水蜜桃| 久久综合伊人77777尤物| 久久久久久婷| 蜜臀久久99精品久久久画质超高清| 久久精品国产精品亚洲精品| 久久精品国产久精国产爱| 欧美一区二区三区在线视频| 午夜精品999| 欧美综合国产| 久久青草欧美一区二区三区| 久久美女性网| 欧美国产精品v| 欧美日韩精品系列| 欧美天天影院| 国产日韩av在线播放| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 久久国产精品网站| 久久久久国产免费免费| 美女国产一区| 欧美日韩国产大片| 国产精品久久久久久久久免费桃花 | 在线精品国产成人综合| 亚洲人成精品久久久久| 中文日韩在线视频| 欧美一区二区三区啪啪| 久久香蕉国产线看观看av| 欧美激情影音先锋| 亚洲天堂av综合网| 久久精品99无色码中文字幕| 蜜臀av一级做a爰片久久| 欧美日韩国产精品专区| 国产精品一区毛片| 亚洲国产小视频在线观看| 亚洲网站在线看| 久久久久久久久久久久久9999| 欧美激情精品久久久久久久变态| 亚洲乱亚洲高清| 性18欧美另类| 欧美激情精品久久久久久黑人| 欧美性猛交xxxx免费看久久久| 国产亚洲观看| 妖精成人www高清在线观看| 欧美一区二区成人| 亚洲国产精品v| 亚洲女同精品视频| 欧美国产日韩二区| 国产视频在线一区二区| 99精品国产一区二区青青牛奶| 久久福利毛片| 亚洲人成艺术| 久久亚洲午夜电影| 国产精品私房写真福利视频| 最新亚洲一区| 久久成人综合视频| 一本色道久久88综合日韩精品 | 国产精品午夜在线| 亚洲人久久久| 久久亚洲精选| 亚洲欧美一级二级三级| 欧美精品免费播放| 在线日韩视频| 久久久久久久尹人综合网亚洲| 亚洲美女av网站| 麻豆成人在线观看| 国产一区二区三区在线观看网站| 亚洲网友自拍| 亚洲欧洲精品一区二区精品久久久| 欧美在线日韩| 国产欧美视频一区二区三区| 这里只有精品在线播放| 欧美好吊妞视频| 久久亚洲一区二区三区四区| 国产真实久久| 久久精品免费看| 亚洲一级影院| 国产精品h在线观看| 99在线热播精品免费| 亚洲国产精品黑人久久久 | 午夜视频久久久久久| 国产精品高潮在线| 亚洲一二三区在线观看| 亚洲久久在线| 欧美日韩综合视频网址| 亚洲免费高清视频| 亚洲精品乱码久久久久久| 欧美国产视频在线观看| 亚洲精品日韩久久| 亚洲欧洲一区二区三区| 欧美激情第10页| 99re热这里只有精品视频| 91久久嫩草影院一区二区| 欧美二区不卡| 国产精品99久久久久久久女警 | 裸体素人女欧美日韩|