Doxygen给C程序生成注释文档
近段时间,一直在学习华为C语言编程规范(2011版),在“注释”这一章中发现了一种“Doxygen”的注释转文档工具,查看诸多相关资料,并进行编程实践,终于可以利用Doxygen给C程序生成注释文档。在使用过程中,我已经深深地喜欢Doxygen,并在写代码时使用Javadoc注释风格。
本文由三部分组成:1)工具下载及安装;2)编写Doxygen可识别的注释;3)利用Doxygen工具将注释转换成API文档。
1、工具下载及安装
(1)Doxygen可以从一套源文件开始,生成HTML格式的在线类浏览器。笔者采用的版本是Doxygen1.8.9.1
(2)Microsoft HTML Help Workshop是微软开发,用于本工程创建*.chm文件,笔者上官网下载最新的htmlhelp
(3)Graphviz用于配合doxygen使用,提取函数之间、头文件之间的调用关系,笔者使用的版本是graphviz-2.38.
2、编写Doxygen可识别的注释
(1)注释模板
本文采用的是Javadoc风格的注释,参照CSDN博客上的注释模板;
一、文件注释
/**
* @file CommonType.h
* @brief 常见类型定义
* @author Vincent
* @date 2015-5-24
* @version A001
* @copyright Vincent
*/
二、函数注释
/**
* 读取文件
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @param[in] dataLen 数据长度
* @param[out] fileData 输出数据
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
* @see
* @note
*/
UINT ReadFile(UINT fileNameLen, BYTE *fileName, UINT dataLen, BYTE *fileData);
三、类型/宏定义注释
/**
* 2字节字符类型
*/
typedef unsigned short WORD;
四、枚举/结构注释
/** 枚举类型*/
enum COLOR{
RED=, ///< 红色
GREEN=1,///< 绿色
YELLOW=2///< 黄色
};
(2)Doxygen工程实例
为了让接触Doxygen工具的人快速上手,笔者使用VC++6.0创建了一个DoxygenTest工程,并为其编写测试代码以及Javadoc风格的注释,工程的文件列表如下图所示,并依次展示每个文件的代码。

AddrDefine.h
/**
* @file AddrDefine.h
* @brief 地址定义
*/
#ifndef ADDR_DEFINE_H
#define ADDR_DEFINE_H /**@name 地址定义
* @{
*/
#define ADDR_FILE_START 0x00000000 ///<文件起始地址
#define ADDR_DIR_START 0x00000001 ///<目录起始地址
/**@} */ #endif
CommonType.h
/**
* @file CommonType.h
* @brief 常见类型定义
* @author Vincent
* @date 2015-5-24
* @version A001
* @copyright Vincent
*/
#ifndef COMMON_TYPE_H
#define COMMON_TYPE_H /**
* 4字节字符类型
*/
typedef unsigned int UINT; /**
* 1字节字符类型
*/
typedef unsigned char BYTE; /**
* 2字节字符类型
*/
typedef unsigned short WORD; /** 坐标系类型 */
typedef struct{
int x;///<横坐标
int y;///<纵坐标
}Coordinator; /** 枚举类型*/
enum COLOR{
RED=, ///< 红色
GREEN=1,///< 绿色
YELLOW=2///< 黄色
}; /** 空的宏定义*/
#define NULL 0
#endif
RetCode.h
/**
* @file RetCode.h
* @brief 错误码返回值
* @author Vincent
* @date 2015-5-24
* @version A001
* @par Copyright (c): Vincent
*/ #ifndef RET_CODE_H
#define RET_CODE_H /**@name 执行状态
* @{
*/
#define SUCCESS 0x00000000 ///<执行成功
#define ERR_PARA_LEN 0x00000001 ///<长度错误
#define ERR_NULL_POINT 0x00000002 ///<空指针错误
#define ERR_PARA_TYPE 0x00000003 ///<参数类型错误
/** @}*/ #endif
DoxygenFile.h
/**
* @file DoxygenFile.h
* @brief 中间层,用于处理数据
* @author Vincent
* @date 2015-5-24
* @version A001
* @par Copyright (c): Vincent
*/
#ifndef DOXYGEN_FILE_H
#define DOXYGEN_FILE_H #include "CommonType.h" /**
* 写入一些内容
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @param[out] fileData 文件数据
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
*/
int HandleData(UINT fileNameLen,BYTE *fileName, BYTE *fileData); #endif
DoxygenFile.c
#include "DoxygenFile.h"
#include "HandleFile.h" /**
* 写入一些内容
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @param[out] fileData 文件数据
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
*/
int HandleData(UINT fileNameLen,BYTE *fileName, BYTE *fileData)
{
UINT retCode;
retCode = ReadFile(,NULL,,NULL);
return retCode;
}
HandleFile.h
/**
* @file HandleFile.h
* @brief 操作文件
* @details 所有涉及文件操作
* @author Vincent
* @date 2015-5-24
* @version A001
* @par Copyright (c): Vincent
*/
#ifndef HANDLE_FILE_H
#define HANDLE_FILE_H
#include "CommonType.h" /**
* 读取文件
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @param[in] dataLen 数据长度
* @param[out] fileData 输出数据
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
* @see
* @note
*/
UINT ReadFile(UINT fileNameLen, BYTE *fileName, UINT dataLen, BYTE *fileData); /**
* 写入文件
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @param[out] fileData 输出数据
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
* @see
* @note
*/
UINT WriteFile(UINT fileNameLen, BYTE *fileName, BYTE *fileData); /**
* 擦除文件
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
* @see
* @note
*/
UINT EraseFile(UINT fileNameLen, BYTE *fileName);
#endif
HandleFile.c
#include "HandleFile.h"
#include "RetCode.h"
#include "AddrDefine.h" /**
* 读取文件
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @param[in] dataLen 数据长度
* @param[out] fileData 输出数据
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
* @see
* @note
*/
UINT ReadFile(UINT fileNameLen, BYTE *fileName, UINT dataLen, BYTE *fileData)
{
return SUCCESS;
} /**
* 写入文件
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @param[out] fileData 输出数据
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
* @see
* @note
*/
UINT WriteFile(UINT fileNameLen, BYTE *fileName, BYTE *fileData)
{
return SUCCESS;
} /**
* 擦除文件
* @param[in] fileNameLen 文件名长度
* @param[in] fileName 文件名
* @return 0,执行成功,非0,失败,详见
* @ref RetCode.h
* @see
* @note
*/
UINT EraseFile(UINT fileNameLen, BYTE *fileName)
{
return SUCCESS;
}
main.c
#include "DoxygenFile.h"
#include "CommonType.h" /**
* @mainpage Doxygen工程演示
* @section 介绍
* 1、本工程使用了5个头文件
* @ref AddrDefine.h
* @ref CommonType.h
* @ref DoxygenFile.h
* @ref HandleFile.h
* @ref RetCode.h \n
* 2、生成本工程,需安装Doxygen、htmlhelp、GraphViz三个软件
*/ void main()
{
HandleData(,NULL,NULL);
}
3、利用Doxygen工具将注释转换成API文档
接下来,就是利用Doxygen工具将DoxygenTest工程中注释提取出来,转换成chm格式的API文档。第三部分分成九步:1、工程配置;2、模式配置;3、输出配置;4、调用图配置;5、字符集配置;6、输入字符集配置;7、chm配置;8、Grapviz配置;9、执行Doxygen。
1、工程配置;

2、模式配置;

3、输出配置;

4、调用图配置;

5、字符集配置;

6、输入字符集配置;

7、chm配置;

8、Grapviz配置;

9、执行Doxygen

完成上述操作之后,就能生成如下API文档

参考资料
1、Doxygen配置以及注释详细说明文档:doxygen_manual-1.8.9.1.pdf
Doxygen给C程序生成注释文档的更多相关文章
- 使用doxygen生成注释文档
1. doxygen下载地址:http://www.stack.nl/~dimitri/doxygen/ 2. 参考http://wenku.baidu.com/link?url=ETvBUyaR9f ...
- [Dynamic Language] 用Sphinx自动生成python代码注释文档
用Sphinx自动生成python代码注释文档 pip install -U sphinx 安装好了之后,对Python代码的文档,一般使用sphinx-apidoc来自动生成:查看帮助mac-abe ...
- 利用JSDOC快速生成注释文档,非常棒。
有时往往我们需要建一个文档来记录js中的一些代码注释,比如一些公共的函数,又或者一些类,在团队合作中,文档接口也是必不可少的,传统的方式多少有些不便,这里介绍一个工具,它叫JSDOC,它可以用来将注释 ...
- VS2010 生成Xml格式的注释文档
项目, 属性, build, 勾选xml document file, 重新build, 即可生成xml注释文件, 然后还得找工具软件(看到anytao推荐SandCastle) 生成更易读的帮助文档 ...
- 在eclipse中生成html注释文档
生成api文档 文档注释/** 1.描述 2.@author 作者 @version 版本 3.@param 参数 @return 返回值的含义 @throws 抛出异常描述 @deprecated ...
- Xcode 利用VVDocumenter 生成注释 通过设置 再生成注释文档
在写代码的时候,如果按照一定的规范在头文件里写上注释的话, 就可以利用Xcode的文档自动输出功能生成一份完整的HTML项目文档. 生成的格式和Apple Developer网站上的API文档几乎是一 ...
- Android Studio javadoc 生成注释文档
相信大家刚开始写代码的时候就被前辈告知了要养成写注释的好习惯,今天我们来了解一下如何利用我们平时写的注释生成文档,一起来看看吧! 其实注释格式一般如下两种: /* *普通多行 *注释 */ / ...
- 使用doxygen为C/C++程序生成中文文档
文章来自:http://www.fmddlmyy.cn/text21.html 依照约定的格式凝视源码,用工具处理凝视过的源码产生文档.通过这样的方式产生文档至少有下面优点: 便于代码和文档保持同步. ...
- 用doxygen+graphviz自动化生成代码文档(附详细教程)
一.引子 用这两个工具可以自动的遍历代码,并且产生代码文档,我们先来看看效果,然后放出这两个工具的下载地址. 二.工具的下载地址 doxygen:http://www.stack.nl/~dimitr ...
随机推荐
- archlinux vmware一些问题
虚拟机没法上网 sudo modprobe vmnet sudo vmware-network --start
- 【引】objective-c,6:Autorelease Pool
参考博客: http://blog.leichunfeng.com/blog/2015/05/31/objective-c-autorelease-pool-implementation-princi ...
- Tomcat报错:Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
Failed to start component [StandardEngine[Catalina].StandardHost[localhost]] 解决办法: 1,检测你的web.xml.去掉所 ...
- 05_动手动脑之String.equals()方法的实现代码
Question: 请查看String.equals()方法的实现代码,注意学习其实现方法. Answer: java中的String.equals()方法的实现代码: equals()法是根类Obj ...
- 「LINUX资料」基础命令概览(一)
- POI2012
现在才开始写 POI 是不是太弱了? -Rendezvous 怎么说呢,我发现我的代码好长啊-长啊-长啊-长长长长长长长长长长长长长长长长长长长长长长啊- 大概就是在一个内向树上搞一个类似 lca 的 ...
- php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为: ...
- DataSet,DataTable与DataRow的复制方法
DataSet 对象是支持 ADO.NET的断开式.分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据 ...
- oracle11g重置system密码,外二
来自:http://lukeview.blog.51cto.com/508652/912124 win+r,输入sqlplus /nolog,回车SQL> conn /as sysdba已连接: ...
- IOS开发-图片上传
目前IOS端开发,图片上传到服务器分为两种,一种是直接上到服务器,一种是借助第三方储存(减少服务器压力). 一.直接上传到服务器 /** * 代码演示 */ //*******UIImagePNGRe ...