doxygen使用与C++注释规范

来源:互联网 发布:713中美南海对峙知乎 编辑:程序博客网 时间:2024/06/06 09:25
<div id="article_content" class="article_content tracking-ad" data-mod="popu_307" data-dsm="post">


1. &nbsp; doxygen的安装与参数配置<br>
1.1. &nbsp;安装<br>
$ sudo apt-get install doxygen<br>
以下可以选择安装<br>
$sudo apt-get install doxygen-doc doxygen-gui graphviztexpower dot2tex graphviz-doc texpower-examples<br>
1.2. &nbsp;生成配置文件<br>
在 shell 提示上,输入命令 doxygen -g。这个命令在当前目录中生成一个可编辑的配置文件 Doxyfile。可以改变这个文件名,在这种情况下,应该调用 doxygen -g&lt;user-specified file name&gt;<br>
1.3. &nbsp;修改配置参数<br>
l &nbsp; &nbsp; &nbsp; &nbsp;&lt;OUTPUT_DIRECTORY&gt;:必须在这里提供一个目录名,例如 /home/user1/documentation,这个目录是放置生成的文档文件的位置。如果提供一个不存在的目录名,doxygen 会以这个名称创建具有适当用户权限的目录。<br>
l &nbsp; &nbsp; &nbsp; &nbsp;&lt;INPUT&gt;:这个标记创建一个以空格分隔的所有目录的列表,这个列表包含需要生成文档的 C/C++ 源代码文件和头文件。例如,请考虑以下代码片段:<br>
INPUT = /home/user1/project/kernel /home/user1/project/memory<br>
在这里,doxygen 会从这两个目录读取 C/C++ 源代码。如果项目只有一个源代码根目录,其中有多个子目录,那么只需指定根目录并把&lt;RECURSIVE&gt; 标记设置为 Yes。<br>
l &nbsp; &nbsp; &nbsp; &nbsp;&lt;FILE_PATTERNS&gt;:在默认情况下,doxygen会搜索具有典型 C/C++ 扩展名的文件,比如 .c、.cc、.cpp、.h 和 .hpp。如果&lt;FILE_PATTERNS&gt; 标记没有相关联的值,doxygen就会这样做。如果源代码文件采用不同的命名约定,就应该相应地更新这个标记。例如,如果项目使用 .c86 作为 C 文件扩展名,就应该在 &lt;FILE_PATTERNS&gt; 标记中添加这个扩展名。<br>
l &nbsp; &nbsp; &nbsp; &nbsp;&lt;RECURSIVE&gt;:如果源代码层次结构是嵌套的,而且需要为所有层次上的 C/C++ 文件生成文档,就把这个标记设置为 Yes。例如,请考虑源代码根目录层次结构 /home/user1/project/kernel,其中有/home/user1/project/kernel/vmm 和/home/user1/project/kernel/asm 等子目录。如果这个标记设置为 Yes,doxygen 就会递归地搜索整个层次结构并提取信息。<br>
l &nbsp; &nbsp; &nbsp; &nbsp;&lt;EXTRACT_ALL&gt;:这个标记告诉 doxygen,即使各个类或函数没有文档,也要提取信息。必须把这个标记设置为 Yes。<br>
l &nbsp; &nbsp; &nbsp; &nbsp;&lt;EXTRACT_PRIVATE&gt;:把这个标记设置为 Yes。否则,文档不包含类的私有数据成员。<br>
l &nbsp; &nbsp; &nbsp; &nbsp;&lt;EXTRACT_STATIC&gt;:把这个标记设置为 Yes。否则,文档不包含文件的静态成员(函数和变量)。<br>
l &nbsp; &nbsp; &nbsp; &nbsp;&lt;SOURCE_BROWSER&gt;:把这个标记设置为 Yes,自动加入源码。<br>
&nbsp;<br>
&nbsp;<br>
2. &nbsp; 文件注释<br>
2.1. &nbsp;示例<br>
/**<br>
&nbsp;* @file apply.c<br>
&nbsp;* @author lishujie<br>
&nbsp;* @version 1.0<br>
&nbsp;* @date 2013-12-12<br>
&nbsp;* @brief this brief<br>
&nbsp;* @details this's details<br>
&nbsp;*/<br>
2.2. &nbsp;说明<br>
l &nbsp; &nbsp; &nbsp; &nbsp;“@file”后的文件名需与当前文件名一致<br>
&nbsp;<br>
3. &nbsp; 结构体注释<br>
3.1. &nbsp;简洁样例<br>
typedef struct Mac_Config &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /// &nbsp;the brief structcomment<br>
{<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;charmacaddr[QCT_OTHER_MACADDR_64]; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;///&lt; The brief mement comment<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;chardevicename[QCT_OTHER_DEVNAME_64]; &nbsp; &nbsp; &nbsp; &nbsp; ///&lt; The brief mement comment<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;intchecked; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;///&lt; The brief mement comment<br>
} Mac_list;<br>
3.2. &nbsp;详细样例<br>
/**<br>
&nbsp;* this is details struct<br>
&nbsp;*/<br>
typedef struct DynamicConfigT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/// &nbsp;The brief mementcomment<br>
{<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; nApplyId; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;///&lt; The brief mement comment<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; nTime; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ///&lt; The brief mement comment<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; nReboot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ///&lt; The brief mement comment<br>
&nbsp;<br>
&nbsp; &nbsp; /** this is details mement comment */<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;char** &nbsp;aValTable; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;///&lt; The brief mement comment<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LocalHndl &nbsp; pfnHndl; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;///&lt; The brief mement comment<br>
} DynamicConfig;<br>
3.3. &nbsp;说明<br>
l &nbsp; &nbsp; &nbsp; &nbsp;“///”与注释间留有2个空格<br>
l &nbsp; &nbsp; &nbsp; &nbsp;“///&lt;”与注释间留有1个空格<br>
l &nbsp; &nbsp; &nbsp; &nbsp;结构体成员的详细注释写在该成员上面<br>
l &nbsp; &nbsp; &nbsp; &nbsp;结构体成员的详细注释与上一成员间留1个空行<br>
l &nbsp; &nbsp; &nbsp; &nbsp;推荐结构体使用typedef类型定义<br>
l &nbsp; &nbsp; &nbsp; &nbsp;推荐使用简洁的结构体注释<br>
&nbsp;<br>
4. &nbsp; 枚举注释<br>
4.1. &nbsp;样例<br>
typedef enum _COLOR &nbsp; &nbsp; &nbsp; /// &nbsp;The brief enum comment<br>
{<br>
BLACK, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ///&lt; The brief member comment<br>
NAVY, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;///&lt; The brief member comment<br>
}COLOR;<br>
4.2. &nbsp;说明<br>
l &nbsp; &nbsp; &nbsp; &nbsp;与结构体的简洁注释相同<br>
&nbsp;<br>
5. &nbsp; 宏注释<br>
5.1. &nbsp;简洁样例<br>
/// This macro is toolong, so comment here briefly!<br>
#define HTTP_REQUEST_LEN_MAX &nbsp; &nbsp;APPLY_BUF_SIZE_BIG<br>
5.2. &nbsp;详细样例<br>
/**<br>
&nbsp;* The detail macro comment, may be multi-line.<br>
&nbsp;* @param a The brief parameter comment<br>
&nbsp;* @param b The brief parameter comment<br>
&nbsp;* @return The brief return value comment<br>
&nbsp;*/<br>
#define MAX(a, b) ((a) &gt; (b))? (a) : (b)<br>
5.3. &nbsp;说明<br>
l &nbsp; &nbsp; &nbsp; &nbsp;尽量少写宏函数,可以使用内联函数代替<br>
l &nbsp; &nbsp; &nbsp; &nbsp;推荐使用简洁的宏注释<br>
&nbsp;<br>
6. &nbsp; 函数注释<br>
6.1. &nbsp;简洁样例<br>
/// The brieffunction comment, may be multi-line.<br>
static int apply_login();<br>
6.2. &nbsp;详细样例<br>
/**<br>
&nbsp;* The detail function comment, may bemulti-line.<br>
&nbsp;* @param cur_id The brief parameter comment<br>
&nbsp;* @return The brief return value comment<br>
&nbsp;* @brief The brief function comment<br>
&nbsp;*/<br>
static int reboot_enable( intcur_id )<br>
6.3. &nbsp;说明<br>
l &nbsp; &nbsp; &nbsp; &nbsp;简述以///+空格开头或使用@brief ,详述以/**开头<br>
l &nbsp; &nbsp; &nbsp; &nbsp;无参无返回值的简单函数使用简洁注释<br>
l &nbsp; &nbsp; &nbsp; &nbsp;头文件有声明的函数注释在头文件中;否则注释在代码文件中<br>
&nbsp;<br>
7. &nbsp; 其它注释<br>
l &nbsp; &nbsp; &nbsp; &nbsp;代码中其余注释一律使用普通的单行注释“//”和多行注释“/*”“*/”。<br>
&nbsp;<br>
8. &nbsp; 附录<br>
8.1. &nbsp;注释换行<br>
Doxygen 会忽略你注释中的换行符,将多行注释连接成一个连续行并使用空格隔开。如<br>
果你希望保留两行注释之间的换行,需要在该行末加入“/n”。<br>
8.2. &nbsp;常用命令<br>
命令<br>
生成字段名<br>
说明<br>
@attention<br>
注意<br>
&nbsp;<br>
@author<br>
作者<br>
&nbsp;<br>
@bug<br>
缺陷<br>
链接到所有缺陷汇总的缺陷列表<br>
@brief<br>
简要注释<br>
&nbsp;<br>
@code<br>
&nbsp;<br>
代码块开始,与“nendcode”成对使用<br>
@details<br>
详细注释<br>
&nbsp;<br>
@date<br>
日期<br>
&nbsp;<br>
@endcode<br>
&nbsp;<br>
代码块结束,与“ncode”成对使用<br>
@file<br>
&lt; 文件名&gt; 文件参考<br>
用在文件注释中<br>
@param<br>
参数<br>
用在函数注释中<br>
@return<br>
返回<br>
用在函数注释中<br>
@todo<br>
TODO<br>
链接到所有TODO 汇总的TODO 列表<br>
@version<br>
版本<br>
&nbsp;<br>
@warning<br>
警告<br>
&nbsp;<br>
8.3. &nbsp;vim+Doxygen方便的写注释<br>
8.3.1. &nbsp; 安装<br>
下载 doxygen的 vim 插件<br>
&nbsp; &nbsp;http://www.vim.org/scripts/script.php?script_id=987<br>
将下载的插件安装到$VIMRUNTIME/plugin目录下<br>
在VIM的配置文件中(windows下的_vimrc,linux下的vimrc或者~/.vimrc)为doxygentoolkit这个插件配置一些全局变量:<br>
let g:doxygenToolkit_authorName="your name"<br>
let g:doxygenToolkit_briefTag_funcName="yes"<br>
8.3.2. &nbsp; 常用命令<br>
Dox<br>
DoxAuthor<br>
DoxLic<br>
8.4. &nbsp;给source insight添加doxygen注释风格<br>
请参考:http://blog.csdn.net/dayong419/article/details/7932467
   
</div>
原创粉丝点击