C语言编程规范--代码注释

目录

1、什么是Doxygen?3

2、撰写正确格式的批注... 4

2.1常用指令介绍... 4

2.2简述与详述的方式... 6

2.3文件头注释... 6

2.4版权注释... 6

2.5模块定义(单独显示一页)... 7

2.6分组定义(在一页内分组显示)... 8

2.7变量、宏定义、类型定义简要说明... 8

2.8函数说明... 9

2.9枚举类型定义... 9

2.10项目符号标记... 10

3、使用DoxyWizard生成CHM文档... 11

 

 


 

1、什么是Doxygen?

Doxygen是一个程序的文件产生工具,可将程序中的特定批注转换成为说明文件。通常我们在写程序时,或多或少都会写上批注,但是对于其它人而言,要直接探索程序里的批注,与打捞铁达尼号同样的辛苦。大部分有用的批注都是属于针对函式,类别等等的说明。所以,如果能依据程序本身的结构,将批注经过处理重新整理成为一个纯粹的参考手册,对于后面利用您的程序代码的人而言将会减少许多的负担。不过,反过来说,整理文件的工作对于您来说,就是沉重的负担。

Doxygen就是在您写批注时,稍微按照一些它所制订的规则。接着,他就可以帮您产生出漂亮的文档了。

因此,Doxygen的使用可分为两大部分。首先是特定格式的批注撰写,第二便是利用Doxygen的工具来产生文档。

目前Doxygen可处理的程序语言包含:

  • C/C++
  • Java
  • IDL (Corba, MicrosoftKDE-DCOP类型)  

而可产生出来的文档格式有:

  • HTML
  • XML
  • LaTeX
  • RTF
  • Unix Man Page

而其中还可衍生出不少其它格式。HTML可以打包成CHM格式,而LaTeX可以透过一些工具产生出PS或是PDF文档。

2、撰写正确格式的批注

若需要通过Doxygen生成漂亮的文档,一般有如下几个地方需要使用Doxygen支持的风格进行注释:
    1
) 文件头(包括.h.cpp
        
主要用于声明版权,描述本文件实现的功能,以及文件版本信息等
    2
) 类的定义
        
主要用于描述该类的功能,同时也可以包含使用方法或者注意事项的简要描述
    3
) 类的成员变量定义
        
在类的成员变量上方,对该成员变量进行简要地描述
    4
 类的成员函数定义
        
在类定义的成员函数上方,对该成员函数功能进行简要描述
    5
) 函数的实现在函数的实现代码处,详细描述函数的功能、参数的含义、返回值的含义、使用本函数需要注意的问题、本函数使用其他类或函数的说明等

2.1常用指令介绍

可以在注释中加一些Doxygen支持的指令,主要作用是控制输出文档的排版格式,使用这些指令时需要在前面加上“\”或者“@”(JavaDoc风格)符号,告诉Doxygen这些是一些特殊的指令,通过加入这些指令以及配备相应的文字,可以生成更加丰富的文档,下面对比较常用的指令做一下简单介绍。

 

@file

档案的批注说明。

eg

@file    stm32f10x_tim.c

@author

作者的信息

eg

@author  MCD Application Team

@brief

用于classfunction的批注中,后面为classfunction的简易说明。

eg

@brief   This file provides all the TIM firmware functions.

@param

主要用于函数说明中,后面接参数的名字,然后再接关于该参数的说明

eg

@param  TIMx: where x can be  1, 2, 3, 4, 5 or 8 to select the TIM peripheral.

@return

描述该函数的返回值情况

eg:

@return 本函数返回执行结果,若成功则返回TRUE,否则返回FLASE

@retval

描述返回值类型 主要用于函式说明中,说明特定传回值的意义。所以后面要先接一个传回值。然后在放该传回值的说明。

eg:

@retval NULL 空字符串。
@retval !NULL 非空字符串。

@note

注解

@attention

注意

@warning

警告信息

@enum

引用了某个枚举,Doxygen会在该枚举处产生一个链接

eg

@enum CTest::MyEnum

@var

引用了某个变量,Doxygen会在该枚举处产生一个链接

eg

@var CTest::m_FileKey

@class

引用某个类,

格式:@class <name> [<header-file>] [<header-name>]

eg:

@class CTest "inc/class.h"

@exception

可能产生的异常描述

eg:

@exception 本函数执行可能会产生超出范围的异常

@todo

对将要做的事情进行注释

@see

一段包含其他部分引用的注释,中间包含对其他代码项的名称,自动产生对其的引用链接。

@relates

通常用做把非成员函数的注释文档包含在类的说明文档中。

@since

通常用来说明从什么版本、时间写此部分代码

@deprecated


@pre

用来说明代码项的前提条件

@post

用来说明代码项之后的使用条件。

@code

在注释中开始说明一段代码,直到@endcode命令

@endcode

注释中代码段的结束。

 

2.2简述与详述的方式

在每个代码项中都可以有两类描述这两类描述将在文档中格式化在一起一种就是brief描述另一种就是detailed 两种都是可选的,但不能同时没有。

顾名思义简述(brief)就是在一行内简述地描述。而详细描述(detailed description)则提供更长更详细的文档。

一般注释的描述由简述开始,经过特殊分隔方式后,后面紧跟详述的内容,javaDoc风格可以使用的分隔方法有以下两种:

1       使用@brief 参数标识,空行作为简述和详述的间隔标识

1.   /**   @brief  Brief description.  

2.    *    description continued.  

3.    *  

4.    *    Detailed description starts here.  

5.    */ 

2 直接使用javaDoc风格,javaDoc风格自动以简述开头,以空行(或者小数点加空格)作为简述与详述的分割

1.   /**   Brief description  

2.    *    description continued . (注意:这里有一个小数点,加上一个空格 

3.    *    Detailed description starts here.  

4.    */ 

2.3文件头注释

2.4版权注释

1.   /**

2.     ******************************************************************************

3.     * @file    stm32f10x_dma.c

4.     * @author  MCD Application Team

5.     * @version V3.5.0

6.     * @date    11-March-2011

7.     * @brief   This file provides all the DMA firmware functions.

8.     ******************************************************************************

9.     * @attention

10.    *

11.    * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

12.    * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE

13.    * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY

14.    * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING

15.    * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE

16.    * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

17.    *

18.    * <h2><center>&copy; COPYRIGHT 2014  深圳电应普科技有限公司  </center></h2>

19.    ******************************************************************************

20.    */}

 

2.5模块定义(单独显示一页) 

在文档注释块中使用'@defgroup'命令来定义一个组。命令有两个参数,第一个参数用来唯一标识组,第二个参数是指明该组在文档中显示的标题。

1.   /**     

2.    *    @defgroup 模块名 模块的说明文字 

3.    *     @{

4.    */ 

5.    

  1. ... 定义的内容 ...

7.    

8.   /**

9.    *      @}// 模块结尾

10.   */

 

如果你使用同一个组名一次以上那么你会遇到一个错误。你可以使用'\addtogroup'来代替'\defgroup'来防止doxygen只限制唯一的标识。它的用法和'\defgroup'是一样的,不同的只是当多次使用一个组名的时候,它会自动将其中的内容和之前的组名合并。组的题目在这里是可选的,语法如下,

1.   /**     

2.    *    addtogroup <label> 

3.    *     @{

4.    */ 

5.    

  1. ... 定义的内容 ...

7.    

8.   /**

9.    *      @}

10.   */

 

2.6分组定义(在一页内分组显示)

1.   /**     

2.    *    @name 分组说明文字 

3.    *     @{

4.    */ 

5.    

6.  ... 定义的内容 ...

7.    

8.   /**

9.    *      @}// 模块结尾

10.   */

 

2.7变量、宏定义、类型定义简要说明

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

/*!< 成员变量描述 */

1)在成员变量上面加注释的格式

1.   /** 成员变量描述 */ 

2.   int  m_Var; 

2)在成员变量后面加注释的格式

1.  int  m_color;     /*!< 颜色变量 */     

 

1.   /** @brief 简要说明文字(在前面加 @brief 是标准格式) */

2.  #define MIN_UINT 0   

 

1.   /*

2.    *  分行的简要说明 \n

3.    *  这是第二行的简要说明

4.    */

5.  int b;  

 

2.8函数说明

1.   /*

2.    * 简要的函数说明文字

3.    *  @param [in] param1 参数1说明

4.    *  @param [out] param2 参数2说明

5.    *  @return 返回值说明

6.    */

7.   int func(int param1, int param2);

 

1.   /*

2.    * 打开文件 \n

3.    *  文件打开成功后,必须使用 ::CloseFile 函数关闭。

4.    *  @param[in] file_name 文件名字符串

5.    *  @param[in] file_mode 文件打开模式字符串,可以由以下几个模块组合而成:

6.    *  - r 读取

7.    *  - w 可写

8.    *  - a 添加

9.    *  - t 文本模式(不能与 b 联用)

10.   *  - b 二进制模式(不能与 t 联用)

11.   *  @return 返回文件编号

12.   *  - -1 表示打开文件失败

13.   

14.   *  @note 文件打开成功后,必须使用 ::CloseFile 函数关闭

15.   *  @par 示例:

16.   *  @code

17.      // 用文本只读方式打开文件

18.      int f = OpenFile("d:\\test.txt", "rt");

19.   *  @endcode

20.   

21.   *  @see ::ReadFile ::WriteFile ::CloseFile

22.   *  @deprecated 由于特殊的原因,这个函数可能会在将来的版本中取消。

23.   */

24.  int OpenFile(const char* file_name, const char* file_mode); 

2.9枚举类型定义

1.   /** 枚举常量 */

2.   typedef enum TDayOfWeek

3.   {

4.     SUN = 0, /*!<  星期天(注意,要以 < 小于号开头) */

5.     MON = 1, /*!<  星期一 */

6.     TUE = 2, /*!<  星期二 */

7.     WED = 3, /*!<  星期三 */

8.     THU = 4, /*!<  星期四 */

9.     FRI = 5, /*!<  星期五 */

10.    SAT = 6  /*!<  星期六 */

11.  }

12.  /** 定义类型 TEnumDayOfWeek */

13.  TDayOfWeek TEnumDayOfWeek;

 

2.10项目符号标记

通过在每行的开头添加一系列列对齐的减号('-'),可以生成一个列表。列表项也可以具有标号,这需要在减号的后面跟上一个'#'。列表也可以是嵌套的,这取决于列表项的缩进方式。注意不要忘记'-#'后面的空格。

 

1.     /*!

2.      *  A list of events:

3.      *    - mouse events

4.      *         -# mouse move event

5.      *         -# mouse click event\n

6.      *            More info about the click event.

7.      *         -# mouse double click event

8.      *    - keyboard events

9.      *         1. key down event

10.     *         2. key up event

11.     *

12.     *  More text here.

13.     */ 

The result will be:

A list of events:

  • mouse events
    1. mouse move event
    2. mouse click event
      More info about the click event.
    3. mouse double click event
  • keyboard events
    1. key down event
    2. key up event

3、使用DoxyWizard生成CHM文档

安装好后,开始菜单会多出doxygen菜单,打开里面的DoxyWizard。界面如下图。

Step1Doxygen的工作目录,请指定一个已存在的非中文的文件夹。

Step2做具体配置工作。

首先是Wizard选项卡:

  • Project

Project name: 项目名称

Project version or id: 项目版本号

Source code directory: 项目源码目录

Destination directory: 文档输出目录

 

  • Mode

保持默认选项(Document Entity OnlyOptimize for C++ output)即可。

 

  • Output

要生成CHM文档请选择HTML项中的prepare for compressed HTML (.chm)

同时将With search function (requires PHP enabled web server)的钩去掉。

LaTeX,如果不需要在文档中生成LaTeX公式的话可以不选。

 

  • Diagrams

选择第二项Use Build-In class diagram generator,将使用Doxygen内置的生成功能生成每个类的类图(如果它只有一个类的时候是不会生成的 = =)。

如果需要使用更强大的功能比如类继承体系图,请选择第三项Use dot tool from the GraphViz package,此功能需要安装GraphViz软件。

 

其次是Export选项卡,配置项比Wizard内容多出许多,这里只做简单介绍。

  • Project

OUTPUT_LANGUAGE,选择Chinese

TAB_SIZE Tab的长度,默认为8,大家根据自己喜好……

 

  • Build

默认是会生成public方法,但是貌似有时会莫名奇妙地少掉一些方法的详细信息。

这里也选上EXTRACT_ALL,它保证输出所有public方法及protected方法,static方法不在此范围内。

若要包含static方法的注释,请选中EXTRACT_STATIC

同理EXTRACT_PRIVATE

我们生成文档的目的是为了方便各位调用类与函数,因此生成ALLSTATICLOCAL_CLASSES就好了吧 = =

 

  • Messages

生成时的提示信息,默认即可。

 

  • Input

Input为输入目录,支持多个目录,我们可以放入项目目录和Include目录。

下面的Exclude是忽略目录与文件。

 

  • Source Browser

源码浏览器,默认即可。

 

  • Index

钩选ALPHABETICAL_INDEX,类中将有一个组合类型索引项。如下图所示:

 

  • HTML

如果你之前选择了prepare for compressed HTML (.chm)

这里的GENERATE_HTMLHELP项会是钩选状态。

它下面的CHM_FILE填写你的CHM文档名字。

HHC_LOCATION则选择你的HTML Help WorkShop安装目录下的hhc程序,

一般会在C:/Program Files/HTML Help Workshop/hhc.exe

Doxygen生成的默认是UTF-8,因此若不指定CHM_INDEX_ENCODINGGBK的话,CHM会有部分乱码。

钩选TOC_EXPANDdoxygen会为你生成左边树目录。

 

  • Dot

如果你选用内置的生成功能(即选择Use Build-In class diagram generator),此时CLASS_DIAGRAMS会是钩选状态,而HAVE_DOT则是未选状态,默认即可;

如果你选用GraphVizdot工具生成(即选择Use dot tool from the GraphViz package)情况则相反,请你钩选上CLASS_DIAGRAMS。此时你需要设置下面的DOT_PATHGraphViz的安装目录,否则将无法生成。

另外以下选项钩选则生成对应的图,不选则不生成:

  • CLASS_GRAPHS                         类图
  • COLLABORATION_GRAPH      协作图
  • GROUP_GRAPHS                       组图
  • UML_LOOK                                  是否UML外观
  • INCLUDE_GRAPH                       include
  • INCLUDED_BY_GRAPH            include
  • CALL_GRAPH                               调用
  • CALLER_GRAPH                          被调用
  • DIRECTORY_GRAPH                           目录图
  • GRAPHICAL_HIERARCHY                  继承体系图

建议钩选以上下划线的几项。效果应如下所示:


DOT_IMAGE_FORMAT是生成的图片类型,有PNG/JPG/GIF三种格式可选。

 

其他项没有用过,请大家自己研究 = =

 

配置好后即可运行,进入Run选项卡,单击Run doxygen即开始生成。

对话框会显示调试信息,生成好后点击下面的Show HTML Output可以打开生成的HTML首页。

chm文件则在你指定的生成目录中自己找。

 

关闭前不要忘了保存配置文件,下次可以继续使用。

它会自动提示你是否需要保存,你也可以选择File菜单的Save项自己保存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring系列15:Environment抽象

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 本文内容 Environment抽象的2个重要概念Profile 的使用PropertySource 的使用 Environment抽象的2个重要概念 Environme…

U-Mail邮件服务系统任意文件上传+执行漏洞(runtime缺陷与验证绕过)

http://www.wooyun.org/bugs/wooyun-2010-061859转载于:https://www.cnblogs.com/hookjoy/p/4068326.html

Source Insight使用技巧

一、Source Insight实用技巧&#xff1a; Source Insight(下文的SI指的也是它)就是这样的一个东西&#xff1a;   Windows下开发人员的至爱&#xff0c;功能强大&#xff0c;界面友好。支持语法高亮、符号跳转&#xff0c;还支持函数调用关系图显示。这是一个专业的编程环境&…

剑指offer-翻转单词顺序列

剑指offer-翻转单词顺序列 题目描述 牛客最近来了一个新员工Fish&#xff0c;每天早晨总是会拿着一本英文杂志&#xff0c;写些句子在本子上。同事Cat对Fish写的内容颇感兴趣&#xff0c;有一天他向Fish借来翻看&#xff0c;但却读不懂它的意思。例如&#xff0c;“student. a …

私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 提示&#xff1a;本系列笔记全部存在于 Github&#xff0c; 可以直接在 Github 查看全部笔记 持续部署概述 持续部署是能…

PS图像菜单下计算命令

PS图像菜单下计算命令通过通道的混合模式得到的选区非常精细&#xff0c;从而调色的时候过度非常好。功能十分强大。 下面用计算命令中的"相加"和"减去"模式做实例解析&#xff0c;这里通道混合模式和图层混合模式原理是一样的。 原图&#xff1a; 实例目…

LINQ系列:LINQ to XML操作

LINQ to XML操作XML文件的方法&#xff0c;如创建XML文件、添加新的元素到XML文件中、修改XML文件中的元素、删除XML文件中的元素等。 1. 创建XML文件 string xmlFilePath Server.MapPath("Data/Product.xml");XDocument doc new XDocument (new XDeclaration(&quo…

C语言编程规范

C语言编程规范 范 围: 本规范适用于公司内使用C语言编码的所有软件。本规范自发布之日起生效&#xff0c;以后新编写的和修改的 代码应遵守本规范。 简 介&#xff1a; 本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效 率、可移…

Ubuntu开发之旅一---安装初步

由于有一台小黑&#xff0c;老机器了&#xff0c;闲置时间不长不短&#xff0c;偶尔拿来用下&#xff0c;总感觉windows跑起来太费力&#xff0c;鉴于有过一段时间的Linux开发经验&#xff08;大概四个月左右&#xff09;&#xff0c;故抽空安装了一个ubuntu&#xff0c;原因有…

win10 VScode配置GCC(MinGW)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 前提 安装 Visual Studio Code安装 C/C 扩展 for VS Code 也可以在vscode的extension界面搜索’c’查找插件安装 3. 获取最…

复制构造函数的用法及出现迷途指针问题

复制构造函数利用下面这行语句来复制一个对象&#xff1a; A (A &a) 从上面这句话可以看出&#xff0c;所有的复制构造函数均只有一个参数&#xff0c;及对同一个类的对象的引用 比如说我们有一个类A&#xff0c;定义如下&#xff1a; ?12345678910class A{public:A(int i…

Linux下压缩某个文件夹(文件夹打包)

为什么80%的码农都做不了架构师&#xff1f;>>> tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子&#xff1a;把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。 zip 压缩方法&#xff1a; 压缩当前的文件夹 zi…

解决Warning: Cannot modify header information - headers already sent b...

解决Warning: require(E:\testwwwroot\cc06\wp-admin/wp-includes/compat.php) [function.require]: failed to open stream: No such file or directory in E:\testwwwroot\cc06\wp-admin\wp-settings.php on line 246Fatal error: require() [function.require]: Failed open…

GoJS 使用笔记

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 作为商业软件&#xff0c;GoJs很容易使用&#xff0c;文档也很完备&#xff0c;不过项目中没有时间系统地按照文档学习&…

do while的使用

while循环&#xff1a;while(条件){循环体;} do while循环&#xff1a;do{循环体;}while(条件); //注意do while 有分号 while循环和do while循环只有一个差别&#xff0c;就是&#xff1a;while循环先判断条件&#xff0c;成立才做循环体&#xff1b;do while循环则是先做循环…

Android学习笔记:TabHost 和 FragmentTabHost

2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记&#xff1a;TabHost 和 FragmentTabHostTabHost命名空间&#xff1a;android.widget.TabHost初始化函数&#xff08;必须在addTab之前调用&#xff09;&#xff1a;setup(); 包含两个子元素&#xff1a;…

转HTML、CSS、font-family:中文字体的英文名称

宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft JhengHei 新宋体 NSimSun 新细明体 PMingLiU 细明体 MingLiU 标楷体 DFKai-SB 仿宋 FangSong 楷体 KaiTi 仿宋_GB2312 FangSong_GB2312 楷体_GB2312 KaiTi_GB2312 宋体&#xff1a;SimSuncss中中文字体…

PostgreSQL VACUUM 之深入浅出 (二)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 AUTOVACUUM AUTOVACUUM 简介 PostgreSQL 提供了 AUTOVACUUM 的机制。 autovacuum 不仅会自动进行 VACUUM&#xff0c;也…

基本概念-数据类型

参考&#xff1a;http://edu.51cto.com/roadmap/view/id-59.html5.数据类型5.1 数据类型可以使变量知道如何分配内存空间。例如&#xff0c;char类型占用1个字符&#xff0c;int通常占用4个字节5.2 C 语言常用的数据类型有 int sort 浮点型 double float字符串 char指针&#x…

android webview控件的缩放问题 隐藏缩放控件

利用java的反射机制 public void setZoomControlGone(View view) { Class classType; Field field; try { classType WebView.class; field classType.getDeclaredField("mZoomButtonsController"); field.setAccessible(true); ZoomButtonsController mZoomButton…