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 ...
随机推荐
- codeforces 27E Number With The Given Amount Of Divisors
E. Number With The Given Amount Of Divisors time limit per test 2 seconds memory limit per test 256 ...
- 一些对新手有用的css技巧
一.表单部分 1.禁止textarea文本域的缩放 resize:none; 2.去除初始化textarea下拉条 overflow:auto; 3.如何让表单中的选项按钮,点击文字也能选中? < ...
- NOIP2016报零记
其实,NOIP2016已经于10天之前就结束了,但是由于种种原因,没有写总结. 现在就来填上这个坑吧. DAY1: T1:一道简(kun)单(nan)的模拟,虽然ac,但是考试的时候总觉得怪怪的.并且 ...
- 有关默认相机转VR相机
呃...15年开篇~ 去年想写一个有关默认相机转VR相机的脚本,当时没写完,今天不小心翻到并写完了,而且思路也和原来完全不一样了,增加了是否删除原相机与是否转换所选相机的选项. 由于国内VR版本比较混 ...
- apk安全测试思路
一: apk安全测试 对于一款android的apk程序,主要进行的测试分两部分: 1) 接口测试 ---接口测试实际上是常见的web安全测试 2) android组件测试 --组件测试实际上是and ...
- openjudge-最好的草
http://noi.openjudge.cn/ch0108/17/ 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 奶牛Bessie计划好好 ...
- python海龟图制作
海龟画图很好看,先上图形: 依据代码注释随意打印出来就行: #!/usr/bin/python3.4 # -*- coding: utf-8 -*- import turtle # 拿起一支笔 t = ...
- [IDEA] IDEA 集成PlantUML
在windows下,idea 集成plantuml:1. 首先安装好 graphviz,官网地址:http://www.graphviz.org/Download..php,下载合适的包即可.wind ...
- ping脚本
#!/bin/bash for x in{100..200} ####区间为192.168.100.100-192.168.100.200 do x=$(($x-100)) if fping -c 1 ...
- LB负载均衡之Nginx-Proxy
LB负载均衡之Nginx-Proxy Nginx 反向代理及负载均衡引用实战 Nginx反向代理的原理优点: Nginx proxy(反向代理)作为Nginx的重要功能,使用nginx pr ...