您的位置:BugFree > 论坛 > 技术支持 > Learn BugFree[阅读BugFree代码] > 阅读BugFree代码的好帮手doxygen和Graphviz
2007-09-25 12:06:03 阅读BugFree代码的好帮手doxygen和Graphviz
#1
cuteser
访问次数 : 242
注册日期 : 07-07-06 22:46
上次访问 : 09-10-29 21:05
doxygen和Graphviz这俩开源软件真可谓珠联璧合,尝试着用它俩分析了一下开源软件BugFree的代码,生成的文档(chm格式)刚刚漂亮,函数调用关系一清二楚。也看得出BugFree的主要开发者的大部分注释写得还比较正规,当然,没写注释的函数也很显眼:)。

这个坛子不能贴图,图放在俺博客上了。http://cuteser.blog.sohu.com/65084832.html

有需要这个chm文件的请留下邮箱。

BTW,这个chm文件中的中文显示有点问题,以前正常的啊,不知道是不是UTF8的缘故,俺再研究一下。
回帖
2007-09-25 12:32:15
#2
cuteser
访问次数 : 242
注册日期 : 07-07-06 22:46
上次访问 : 09-10-29 21:05
以下是doxygen抓出来的BugFree目前版本的所有函数:
- _ -
_adodb_getdate() : adodb-time.inc.php
_adodb_getdriver() : adodb.inc.php
_adodb_is_leap_year() : adodb-time.inc.php
_smarty_sort_length() : Smarty_Compiler.class.php
- a -
adodb_backtrace() : adodb.inc.php
adodb_date() : adodb-time.inc.php
adodb_date2() : adodb-time.inc.php
adodb_dow() : adodb-time.inc.php
adodb_get_gmt_diff() : adodb-time.inc.php
adodb_getdate() : adodb-time.inc.php
adodb_gmdate() : adodb-time.inc.php
adodb_gmmktime() : adodb-time.inc.php
adodb_is_leap_year() : adodb-time.inc.php
adodb_mktime() : adodb-time.inc.php
adodb_pr() : adodb.inc.php
ADODB_TransMonitor() : adodb.inc.php
adodb_write_file() : adodb.inc.php
adodb_year_digit_check() : adodb-time.inc.php
ADOLoadCode() : adodb.inc.php
ADOLoadDB() : adodb.inc.php
ADONewConnection() : adodb.inc.php
- b -
bugAddFile() : FunctionsMain.inc.php
bugCreateMailMessage() : FunctionsMain.inc.php
bugEncryptUserPWD() : FunctionsMain.inc.php
bugGetFiles() : FunctionsMain.inc.php
bugGetGroupList() : FunctionsMain.inc.php
bugGetHistory() : FunctionsMain.inc.php
bugGetInfo() : FunctionsMain.inc.php
bugGetModuleChild() : FunctionsMain.inc.php
bugGetModulePath() : FunctionsMain.inc.php
bugGetModules() : FunctionsMain.inc.php
bugGetProjectInfo() : FunctionsMain.inc.php
bugGetProjectModulePathes() : FunctionsMain.inc.php
bugGetProjects() : FunctionsMain.inc.php
bugGetResolutionList() : FunctionsMain.inc.php
bugGetStat() : FunctionsMain.inc.php
bugGetUserACL() : FunctionsMain.inc.php
bugGetUserEmail() : FunctionsMain.inc.php
bugGetUserList() : FunctionsMain.inc.php
bugGetUserQuery() : FunctionsMain.inc.php
bugJudgeAdminUser() : FunctionsMain.inc.php
bugJudgeUser() : FunctionsMain.inc.php
bugLogHistory() : FunctionsMain.inc.php
bugMailChange() : FunctionsMain.inc.php
bugSetBuild() : FunctionsMain.inc.php
- d -
dbCreateIN() : FunctionsMain.inc.php
dbGetFieldInfo() : FunctionsMain.inc.php
dbMergeSQL() : FunctionsMain.inc.php
- k -
KeyWordHeightLight() : FunctionsMain.inc.php
- n -
NewADOConnection() : adodb.inc.php
NewDataDictionary() : adodb.inc.php
NewPerfMonitor() : adodb.inc.php
- r -
reportBugHistorys() : FunctionsMain.inc.php
reportBugLiveDays() : FunctionsMain.inc.php
reportBugsPerModule() : FunctionsMain.inc.php
reportBugsPerProject() : FunctionsMain.inc.php
reportBugsPerResolution() : FunctionsMain.inc.php
reportBugsPerSeverity() : FunctionsMain.inc.php
reportBugsPerStatus() : FunctionsMain.inc.php
reportBugsPerType() : FunctionsMain.inc.php
reportClosedBugsPerDay() : FunctionsMain.inc.php
reportClosedBugsPerUser() : FunctionsMain.inc.php
reportCreateData() : FunctionsMain.inc.php
reportOpenedBugsPerDay() : FunctionsMain.inc.php
reportOpenedBugsPerUser() : FunctionsMain.inc.php
reportResolvedBugsPerDay() : FunctionsMain.inc.php
reportResolvedBugsPerUser() : FunctionsMain.inc.php
- s -
SearchBugFullText() : FunctionsMain.inc.php
smarty_block_textformat() : block.textformat.php
smarty_compiler_assign() : compiler.assign.php
smarty_core_assemble_plugin_filepath() : core.assemble_plugin_filepath.php
smarty_core_assign_smarty_interface() : core.assign_smarty_interface.php
smarty_core_create_dir_structure() : core.create_dir_structure.php
smarty_core_display_debug_console() : core.display_debug_console.php
smarty_core_get_include_path() : core.get_include_path.php
smarty_core_get_microtime() : core.get_microtime.php
smarty_core_get_php_resource() : core.get_php_resource.php
smarty_core_is_secure() : core.is_secure.php
smarty_core_is_trusted() : core.is_trusted.php
smarty_core_load_plugins() : core.load_plugins.php
smarty_core_load_resource_plugin() : core.load_resource_plugin.php
smarty_core_process_cached_inserts() : core.process_cached_inserts.php
smarty_core_process_compiled_include() : core.process_compiled_include.php
smarty_core_read_cache_file() : core.read_cache_file.php
smarty_core_rm_auto() : core.rm_auto.php
smarty_core_rmdir() : core.rmdir.php
smarty_core_run_insert_handler() : core.run_insert_handler.php
smarty_core_smarty_include_php() : core.smarty_include_php.php
smarty_core_write_cache_file() : core.write_cache_file.php
smarty_core_write_compiled_include() : core.write_compiled_include.php
smarty_core_write_compiled_resource() : core.write_compiled_resource.php
smarty_core_write_file() : core.write_file.php
smarty_function_assign_debug_info() : function.assign_debug_info.php
smarty_function_config_load() : function.config_load.php
smarty_function_counter() : function.counter.php
smarty_function_cycle() : function.cycle.php
smarty_function_debug() : function.debug.php
smarty_function_escape_special_chars() : shared.escape_special_chars.php
smarty_function_eval() : function.eval.php
smarty_function_fetch() : function.fetch.php
smarty_function_html_checkboxes() : function.html_checkboxes.php
smarty_function_html_checkboxes_output() : function.html_checkboxes.php
smarty_function_html_image() : function.html_image.php
smarty_function_html_options() : function.html_options.php
smarty_function_html_options_optgroup() : function.html_options.php
smarty_function_html_options_optoutput() : function.html_options.php
smarty_function_html_radios() : function.html_radios.php
smarty_function_html_radios_output() : function.html_radios.php
smarty_function_html_select_date() : function.html_select_date.php
smarty_function_html_select_time() : function.html_select_time.php
smarty_function_html_table() : function.html_table.php
smarty_function_html_table_cycle() : function.html_table.php
smarty_function_mailto() : function.mailto.php
smarty_function_math() : function.math.php
smarty_function_popup() : function.popup.php
smarty_function_popup_init() : function.popup_init.php
smarty_make_timestamp() : shared.make_timestamp.php
smarty_modifier_capitalize() : modifier.capitalize.php
smarty_modifier_capitalize_ucfirst() : modifier.capitalize.php
smarty_modifier_cat() : modifier.cat.php
smarty_modifier_count_characters() : modifier.count_characters.php
smarty_modifier_count_paragraphs() : modifier.count_paragraphs.php
smarty_modifier_count_sentences() : modifier.count_sentences.php
smarty_modifier_count_words() : modifier.count_words.php
smarty_modifier_date_format() : modifier.date_format.php
smarty_modifier_debug_print_var() : modifier.debug_print_var.php
smarty_modifier_default() : modifier.default.php
smarty_modifier_escape() : modifier.escape.php
smarty_modifier_indent() : modifier.indent.php
smarty_modifier_lower() : modifier.lower.php
smarty_modifier_nl2br() : modifier.nl2br.php
smarty_modifier_regex_replace() : modifier.regex_replace.php
smarty_modifier_replace() : modifier.replace.php
smarty_modifier_spacify() : modifier.spacify.php
smarty_modifier_string_format() : modifier.string_format.php
smarty_modifier_strip() : modifier.strip.php
smarty_modifier_strip_tags() : modifier.strip_tags.php
smarty_modifier_truncate() : modifier.truncate.php
smarty_modifier_upper() : modifier.upper.php
smarty_modifier_wordwrap() : modifier.wordwrap.php
smarty_outputfilter_trimwhitespace() : outputfilter.trimwhitespace.php
smarty_outputfilter_trimwhitespace_replace() : outputfilter.trimwhitespace.php
sysAddSlash() : FunctionsMain.inc.php
sysHtml2Txt() : FunctionsMain.inc.php
sysIconv() : FunctionsMain.inc.php
sysMail() : FunctionsMain.inc.php
sysSortArray() : FunctionsMain.inc.php
sysSubStr() : FunctionsMain.inc.php
回帖
2007-09-25 12:51:33
#3
wwccss
访问次数 : 593
注册日期 : 05-05-01 10:08
上次访问 : 10-07-19 11:44
好多函数不是我们写的。是第三方开源的代码。hoho
回帖
2007-09-25 13:16:48
#4
Mr.Lee
访问次数 : 241
注册日期 : 05-10-06 10:46
上次访问 : 09-10-29 21:05
谢谢cuteser介绍了两个好软件
回帖
2007-09-25 17:35:38
#5
Mr.Lee
访问次数 : 241
注册日期 : 05-10-06 10:46
上次访问 : 09-10-29 21:05
[quote=Mr.Lee]谢谢cuteser介绍了两个好软件[/quote]
进来再次感谢。
回帖
2007-09-26 15:08:03
#6
cuteser
访问次数 : 242
注册日期 : 07-07-06 22:46
上次访问 : 09-10-29 21:05
呵, Mr.Lee咋还这么客气。
以下是俺的Doxygen的配置文件。
这仨必须设置成“YES”才能把函数调用呵被调用图给搞出来。

HAVE_DOT = YES

CALL_GRAPH = YES
CALLER_GRAPH = YES

# Doxyfile 1.5.1

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
PROJECT_NAME = bugFreeCode
PROJECT_NUMBER = 1.1
OUTPUT_DIRECTORY = D:/AMP/WWW/Bugfree/SourceCodeDoc
CREATE_SUBDIRS = YES
OUTPUT_LANGUAGE = Chinese
USE_WINDOWS_ENCODING = YES
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = "C:/Documents and Settings/liang.wei/"
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = D:/AMP/WWW/Bugfree
FILE_PATTERNS = *.c \
*.cc \
*.cxx \
*.cpp \
*.c++ \
*.d \
*.java \
*.ii \
*.ixx \
*.ipp \
*.i++ \
*.inl \
*.h \
*.hh \
*.hxx \
*.hpp \
*.h++ \
*.idl \
*.odl \
*.cs \
*.php \
*.php3 \
*.inc \
*.m \
*.mm \
*.dox \
*.py
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = YES
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = YES
回帖
2007-09-26 15:20:22
#7
cuteser
访问次数 : 242
注册日期 : 07-07-06 22:46
上次访问 : 09-10-29 21:05
Doxygen帮助文件中,对“HAVE_DOT”的解释如下:

HAVE_DOT
If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is available from the path. This tool is part of Graphviz, a graph visualization toolkit from AT&T and Lucent Bell Labs. The other options in this section have no effect if this option is set to NO (the default)。
回帖
2007-09-26 15:44:05
#8
cuteser
访问次数 : 242
注册日期 : 07-07-06 22:46
上次访问 : 09-10-29 21:05
"
撰写正确格式的批注
http://www.image2003.com/image2003bbs/dispbbs.asp?boardID=17&ID=2463&page=3

并非所有程序代码中的批注都会被Doxygen 所处理。您必需依照正确的
格式撰写。原则上,Doxygen 仅处理与程序结构相关的批注,如
Function,Class ,档案的批注等。对于Function内部的批注则不做
处理。Doxygen可处理下面几种类型的批注。

JavaDoc类型:
/**
* ... 批注 ...
*/

Qt类型:
/*!
* ... 批注 ...
*/

单行型式的批注:
/// ... 批注 ...

//! ... 批注 ...


要使用哪种型态完全看自己的喜好。以笔者自己来说,大范围的注
解我会使用JavaDoc 型的。单行的批注则使用"///" 的类型。

此外,由于Doxygen 对于批注是视为在解释后面的程序代码。也就是
说,任何一个批注都是在说明其后的程序代码。如果要批注前面的程
式码则需用下面格式的批注符号。
/*!< ... 批注 ... */
/**< ... 批注 ... */
//!< ... 批注 ...
///< ... 批注 ...

上面这个方式并不适用于任何地方,只能用在class 的member或是
function的参数上。

举例来说,若我们有下面这样的class。

class MyClass {
public:
int member1 ;
int member2:
void member_function();
};

加上批注后,就变成这样:

/**
* 我的自订类别说明 ...
*/
class MyClass {
public:
int member1 ; ///< 第一个member说明 ...
int member2: ///< 第二个member说明 ...
int member_function(int a, int b);
};

/**
* 自订类别的member_funtion说明 ...
*
* @param a 参数a的说明
* @param b 参数b的说明
*
* @return 传回a+b。
*/
int MyClass::member_function( int a, int b )
{
return a+b ;
}

当您使用Doxygen 产生说明文件时,Doxygen 会帮您parsing 您的程
式码。并且依据程序结构建立对应的文件。然后再将您的批注,依据
其位置套入于正确的地方。您可能已经注意到,除了一般文字说明外
,还有一些其它特别的指令,像是@param及@return 等。这正是
Doxygen 另外一个重要的部分,因为一个类别或是函式其实都有固定
几个要说明的部分。为了让Doxygen 能够判断,所有我们就必需使用
这些指令,来告诉Doxygen 后面的批注是在说明什么东西。Doxygen
在处理时,就会帮您把这些部分做特别的处理或是排版。甚至是制作
参考连结。

首先,我们先说明在Doxygen 中对于类别或是函数批注的一个特定格
式。

/**
* class或function的简易说明...
*
* class或function的详细说明...
* ...
*/

上面这个例子要说的是,在Doxygen 处理一个class 或是function注
解时,会先判断第一行为简易说明。这个简易说明将一直到空一行的
出现。或是遇到第一个"." 为止。之后的批注将会被视为详细说明。
两者的差异在于Doxygen 在某些地方只会显示简易说明,而不显示详
细说明。如:class 或function的列表。

另一种比较清楚的方式是指定@brief的指令。这将会明确的告诉
Doxygen,何者是简易说明。例如:

/**
* @brief class或function的简易说明...
*
* class或function的详细说明...
* ...
*/

除了这个class 及function外,Doxygen 也可针对档案做说明,条件
是该批注需置于档案的前面。主要也是利用一些指令,通常这部分注
解都会放在档案的开始地方。如:

/*! \file myfile.h
\brief 档案简易说明

详细说明.

\author 作者信息
*/

如您所见,档案批注约略格式如上,请别被"\" 所搞混。其实,"\"
与"@" 都是一样的,都是告诉Doxygen 后面是一个指令。两种在
Doxygen 都可使用。笔者自己比较偏好使用"@"。

接着我们来针对一些常用的指令做说明:

@file

档案的批注说明。
@author

作者的信息
@brief

用于class 或function的批注中,后面为class 或function的简易说明。
@param

格式为
@param arg_name 参数说明
主要用于函式说明中,后面接参数的名字,然后再接关于该参数的说明。
@return

后面接函数传回值的说明。用于function的批注中。说明该函数的传回值。
@retval

格式为
@retval value 传回值说明
主要用于函式说明中,说明特定传回值的意义。所以后面要先接一个传回值。然后在放该传回值的说明。

Doxygen 所支持的指令很多,有些甚至是关于输出排版的控制。您可从Doxygen的使用说明中找到详尽的说明。

下面我们准备一组example.h 及example.cpp 来说明Doxygen 批注的使用方式:

example.h:

/**
* @file 本范例的include档案。
*
* 这个档案只定义example这个class。
*
* @author garylee@localhost
*/

#define EXAMPLE_OK 0 ///< 定义EXAMPLE_OK的宏为0。

/**
* @brief Example class的简易说明
*
* 本范例说明Example class。
* 这是一个极为简单的范例。
*
*/
class Example {
private:
int var1 ; ///< 这是一个private的变量
public:
int var2 ; ///< 这是一个public的变量成员。
int var3 ; ///< 这是另一个public的变量成员。
void ExFunc1(void);
int ExFunc2(int a, char b);
char *ExFunc3(char *c) ;
};


example.cpp:

/**
* @file 本范例的程序代码档案。
*
* 这个档案用来定义example这个class的
* member function。
*
* @author garylee@localhost
*/

/**
* @brief ExFunc1的简易说明
*
* ExFunc1没有任何参数及传回值。
*/
void Example::ExFunc1(void)
{
// empty funcion.
}

/**
* @brief ExFunc2的简易说明
*
* ExFunc3()传回两个参数相加的值。
*
* @param a 用来相加的参数。
* @param b 用来相加的参数。
* @return 传回两个参数相加的结果。
*/
int ExFunc2(int a, char b)
{
return (a+b);
}

/**
* @brief ExFunc3的简易说明
*
* ExFunc3()只传回参数输入的指针。
*
* @param c 传进的字符指针。
* @retval NULL 空字符串。
* @retval !NULL 非空字符串。
*/
char * ExFunc2(char * c)
{
return c;
}

上面这两个档案很简单的说明了Doxygen 批注的使用方式。您可依照此要领在你自己的程序代码中加上对应的批注。其实,无论您有无使用Doxygen ,都不妨依照他的格式将批注写入,一方面是依照他的格式,并不会干扰您程序的运作。另一方面,Doxygen 所定义的都是基本程序批注应当要有的东西。撰写清楚的批注是好的程序设计师应当的工作。"
回帖
2007-10-08 09:45:51
#9
cuteser
访问次数 : 242
注册日期 : 07-07-06 22:46
上次访问 : 09-10-29 21:05
[quote=cuteser]doxygen和Graphviz这俩开源软件真可谓珠联璧合,尝试着用它俩分析了一下开源软件BugFree的代码,生成的文档(chm格式)刚刚漂亮,函数调用关系一清二楚。也看得出BugFree的主要开发者的大部分注释写得还比较正规,当然,没写注释的函数也很显眼:)。

这个坛子不能贴图,图放在俺博客上了。http://cuteser.blog.sohu.com/65084832.html

有需要这个chm文件的请留下邮箱。

BTW,这个chm文件中的中文显示有点问题,以前正常的啊,不知道是不是UTF8的缘故,俺再研究一下。[/quote]
关于中文乱码的问题:
用Doxygen1.4.7版本就没问题,Doxygen1.5以后的版本对中文支持的不太好。
Doxygen的历史版本可以从以下地址下载
ftp://ftp.stack.nl/pub/users/dimitri/
回帖
2008-12-24 13:27:21
#10
jady
访问次数 : 3
注册日期 : 08-12-24 13:24
上次访问 : 09-10-29 21:05
我下载了,可是没办法显示。
刚开始学习中
我的邮箱:fjdtdym@126.com
谢谢
回帖
2010-01-30 17:33:11
#11
lijun
访问次数 : 2
注册日期 : 10-01-30 17:30
上次访问 : 10-02-23 09:04
我是初学者,想着要看懂代码再按自己要想的功能改一下,看了两天了一点头绪都没有,请大师指点一下呀
我PHP学的也不好只是基础,怎么才能看懂呀?
我邮箱:lijuntju@126.com
可以给我传一下吗?
谢谢啦!
回帖
2010-03-02 15:10:48
#12
wwylive
访问次数 : 1
注册日期 : 10-01-21 20:27
上次访问 : 10-03-02 14:44
楼主我也想要这个文件,我的邮箱是648672709@qq.com,多谢了!
回帖