0-1 doxygen注释简规(分组)

本文介绍了doxygen的分组方法,包括模块(modules)的defgroup、addtogroup、ingroup和weakgroup,以及成员分组(member group)的name。讲解了如何定义和添加模块,以及成员分组的注意事项和规范,帮助组织和管理代码文档。

博客迁移已迁移到https://www.guyuemeng.com

概述

基础章节主要介绍了doxygen的基本语法,用于注释类、成员、函数等,由此可以生成含有注释的文档。但在拥有基本注释内容的基础上,面对大量注释,希望可以合理的分类以及布局,即本文将介绍的doxygen分组方法。

模块(modules)

模块的划分会显示在CHM文件中的目录树上,每个模块将单独作为一页显示。这里将着重介绍@defgroup、@addtogroup、@{…@}、@ingroup

defgroup

模块定义的唯一方式,可以是纯定义,也可以定义时初始化模块内容:

1.纯定义

/**
 * @defgroup [gTag] [gName]
 * This is brief.
 * This is detail.
 */

2.定义+初始化

/**
 * @defgroup [gTag] [gName]
 * This is brief.
 * This is detail.
 * @{
 */
...
/** @} */

1.模块的定义语句包含了三部分CMD+TAG+NAME,如上所示:@defgroup为CMD代表定义一个模块;[gTag]为TAG信息,可理解为索引,其他命令将通过它来定位到本模块;[gName]为NAME信息,真实显示到注释文件中的模块名。
2.这里涉及到了@{…@},这类似于类和函数等的{…},表示其中大括号中包含的内容属于当前模块。
3.模块可以嵌套(subgroup)

addtogroup

如其名,将某段内容添加到模块:

/**
 * @addtogroup [gTag]
 * This is detail.
 * @{
 */
...
/** @} */

由以上的格式可见,其与定义+初始化的defgroup比较类似。其中[gTag]为之前定义的group索引,但不用添加模块名;描述信息中仅有detail信息,用以补充group的detail信息。

ingroup

ingroup功能与@{…@}基本相同,不同点在于ingroup拥有更高的优先级。在defgroup或addtogroup中已进行分组的内容会因为@ingroup命令而重新确定归属。

1.示例:将某块代码添加到组

/**
 * @ingroup [gTag]
 * This is brief.
 */
class tClass {}

2.示例:将某组添加为子组

/**
 * @defgroup [gTagSub] [gNameSub]
 * @ingroup [gTag]
 * This is brief.
 */

3.示例:将文件添加到组

/** @file
 *  @ingroup group3
 *  This is brief.
 */

4.示例:将class/file/namespace添加到多个组

/**
 * @ingroup group1 group2 group3 group4
 * This is brief.
 */

weakgroup

功能与addtogroup完全相同,不同的是优先级非常低,在有冲突的情形下,将会被惰性加载。该功能可用于在hpp文件中使用高优先级的分组方法、cpp中使用weakgroup低优先级的分组方法,那么cpp就无需完全复制hpp中的分组方式,从而避免冲突。

成员分组(member group)

模块为分页显示,成员分组功能则是一个class或file内部的分组(个人理解为页内分组,其中成员分组又针对class和file级别做了分组显示。)。若未指定成员分组,doxygen将执行默认分组,例如分为宏定义、函数、变量等。以下将重点介绍分组方法@name

name

成员分组也用到@{…@},用于将包含的内容指定到组。若未指定@name,该分组在doxygen的默认分组下,但会以空行隔开放置最后。自定义的组名的分组示例如下:

/** 
 * A class. Details
 */
class Test
{
public:
    /**
     * @{
     */
    void func1InGroup1();
    /** @} */

    /**
     * @name MyGroup
     * This is brief.
     * This is detail.
     * @{
     */
    void func2InGroup1();
    /** @} */

    void ungroupedFunction();
};

如上,在doxygen的class Test页内,我们将期望看到MyGroup分组。然而可以发现该分组为Public Member Functions分组的一个子组。

禁止分组为子组

class或file添加@nosubgrouping命令

/** 
 * @nosubgrouping
 * A class. Details
 */
class Test
{
}

添加该命令后doxygen默认分组下将再无子组,未命名的分组将失效,已命名的分组将变为与默认分组平级的组。

注意

参考Member Groups中的示例,其中有几项注意点:
1.无nosubgrouping:成员分组中跨类别(public/protected/private/static等)情形下,将自动将命名的组与默认组平级(莫误以为在class的实现上添加的分组就一定会平级)。
2.有nosubgrouping:未命名的分组表现有些怪异,当所有成员分组都在class内部定义时,未命名分组中内容将填充到默认分组下;若分组定义不在class的{}内部(例:包含方法的实现Test::func())时,未命名分组将追加到class外部定义分组的后面。
3.分组name相同时,将显示在同一个组里;分组不能嵌套

规范(私用)

1.禁用所有子组,在有成员分组功能的class或类中必须添加@nosubgrouping
2.禁用不带name的未命名分组
3.class的所有分组定义必须包含在{}范围内,禁止在class外的实现上定义分组

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值