骤雨

2016/08/09 余姚的天气真多变

Posted by WangXiaoDong on August 9, 2016

时间:2016年8月9日 天气:大雨:umbrella:


Author:冬之晓:dizzy_face:
Email: 347916416@qq.com
MyAppearance: MyAppearance

    今天早晨,起来晚了,冲出宿舍。就往公司走,可是半路突然下起大暴雨,到公
司全身湿透!终于明白余姚的天气实在太多变了,以后一定要天天带伞。
    今天下午,江威确定要走了,哎,当初说一起过来,没想到就剩下我一个人了,算了,其他我也不想说啥了……

Doxygen的特殊命令字

Doxygen在进行注释的时候,有很多以@或者\开头后面加上一个特殊命令的字段,然后就可以在生成文档的时候有特殊的作用,我一般喜欢用@,所以后面的命令都使用这个标签,下面我来介绍一下。

结构类的表达

  • @addtogroup [(title)]

使用@defgroup同样可以定义一个组,但是相比之下,多次使用相同<name>@addtogroup命令并不会出现警告,而它是一个将命令中附带的title与文档进行合并的组。
title是可选的,所以该命令可以使用@{@}添加一定数量的实体到一个已存在的组里。例如:

/*! \addtogroup mygrp
   *  Additional documentation for group 'mygrp'
   *  @{
   */

  /*!
   *  A function
   */
  void func1()
  {
  }

  /*! Another function */
  void func2()
  {
  }

  /*! @} */
  • @callgraph

当该命令放置到一个函数或方法的注释块中,且HAVE_DOT设为YES,doxygen将创建一个调用图。

  • @callergraph

当该命令放置到一个函数或方法的注释块中,且HAVE_DOT设为YES,doxygen将创建一个调用者图。

  • @hidecallgraph

当该命令放置到一个函数或方法的注释块中,且HAVE_DOT设为YES,doxygen将不创建一个调用图。

  • @hidecallergraph

当该命令放置到一个函数或方法的注释块中,且HAVE_DOT设为YES,doxygen将不创建一个调用者图。

  • @category [] []

只适用于Object-C:为一个名为<name>的类指定一个文档注释块,此命令参数应与@class相同

  • @class [] []

为一个名字为<name>类指定一个文档注释块,可选择指定的一个头文件和一个头名称。如果指定了一个头文件,在HTML文档中将包含一个指向次头文件的完全副本的链接。<header-name>参数可用于覆盖<header-file>之外的类文档中所使用链接名称,如果在默认包含路径中无法定位包含文件(如<X11/X.h>)时,就非常有用。你也可以指定,使用引号或尖括号中加入头文件,使之看起来象是包容语句。例如:

/* A dummy class */
class Test
{
};
/*! \class Test class.h "inc/class.h" 
 *  \brief This is a test class. 
 * 
 * Some details about the Test class. 
 */
  • @def

用于定义一个#define的注释,例如:

/*! \file define.h    
    \brief testing defines
    
    This is to test the documentation of defines.
*/
/*! \def MAX(x,y) 
    Computes the maximum of \a x and \a y.
*/
/*!    
    Computes the absolute value of its argument \a x.
*/
#define ABS(x) (((x)>0)?(x):-(x))
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)>(y)?(y):(x))         
    /*!< Computes the minimum of \a x and \a y. */
  • @defgroup (group title)

为类、文件或命名空间的组,指定一个文档注释块,可以用于类、文件、命名空间和文档的其他类别进行归类,也可以将组作为其他组的成员,这样就可以创建一个组的层次。

  • @dir []

为一个目录指定一个文档注释块,path fragment参数应包含一个路径名和一个与项目中其他路径不一样的唯一一个全路径(The “path fragment” argument should include the directory name and enough of the path to be unique with respect to the other directories in the project.)

  • enum

为一个名字为<name>的枚举类型指定一个文档注释块,如果此枚举是类中的一个成员,且文档块处于类定义之外,类的作用于同样需要指定。如果一个注释块位于枚举声明之前,那么@enum注释可能被省略。
注意:一个无名的枚举类型将不能被文档化,但一个无名的枚举值是可以使用的。 例如:

class Enum_Test
{  
public:    
    enum TEnum { Val1, Val2 };    
    /*! Another enum, with inline docs */    
    enum AnotherEnum     
    {       
        V1, /*!< value 1 */      
        V2  /*!< value 2 */    
    };
};
    
/*! \class Enum_Test 
 * The class description. 
 */
/*! @enum Enum_Test::TEnum 
 * A description of the enum type. 
 */
/*! @var Enum_Test::TEnum Enum_Test::Val1 
 * The description of the first enum value. 
*/
  • @example

为一个源码的例子指定一个文档注释块,<file-name>是源码文件名,在注释块包含的文档之后,将包含此文件的文本。所有的例子将被放入一个列表中,为了已文档化的成员和类,与文档之间的交叉引用,将对源码进行扫描,源文件或目录将在doxygen的配置文件中使用EXAMPLE_PATH标记指定。

如果<file-name>也就是在EXAMPLE_PATH标记指定的例子文件名,并非是唯一的,你需要包含它的绝对路径,以消除它的二义性。

如果例子中需要多个源文件,可以使用@include命令,例如:

/** A Example_Test class. 
 *  More details about this class. 
 */
class Example_Test
{
public:    
/** An example member function.     
 *  More details about this function.    
 */    
 void example();
};
void Example_Test::example() {}
/** @example example_test.cpp 
 * This is an example of how to use the Example_Test class. 
 * More details about this example. 
 */

下面是例子文件example_test.cpp

void main()
{ 
    Example_Test t; 
    t.example();
}
  • @endinternal

这个命令结束一个以@internal开头的文档块。只要当INTERNAL_DOCS设置为YES时在@internal@endinternal之间的文档才可见。

  • @extends

当编程语言不支持这个特性时,比如C语言,就用这个命令手动指定一个继承关系,。

在例子目录中manual.c文件将显示如何使用这个命令。

  • @file []

为一个名字为<name>的源文件或者头文件,指定一个文档注释块。如果文件名本身并不是唯一的,那么这个文件名可能包含(部分包含)了它的路径,如果该文件名被省略(如@file后留空),那么包含@file命令的文档块将属于它已定位到的那个文件。

要点:全局函数,变量,类型转换,枚举的文档只能包含在输出中,并且他们也已被文档化。

例子:

/** @file file.h 
 * A brief file description. 
 * A more elaborated file description. 
 */
/** 
 * A global integer value. 
 * More details about this value. 
 */
extern int globalValue;

注意:上面的例子中JAVADOC_AUTOBRIEF已经设置为YES

  • @fn (function declaration)

为一个函数(全局函数或者类的成员函数)指定一个文档注释块,此命令只有在一个注释块没有放到函数声明前面或者后面时才需要。

如果注释块放到了函数声明的前面或者后面,此命令可省略(为了避免重复)。

警告:在此命名并非绝对需要时不要使用,否则将导致信息重复的错误。

class Fn_Test
{ 
public: 
    const char *member(char,int) throw(std::out_of_range);
};
const char *Fn_Test::member(char c,int n) throw(std::out_of_range) {}
/*! @class Fn_Test 
 * @brief Fn_Test class. 
 * 
 * Details about Fn_Test. 
 */
/*! @fn const char *Fn_Test::member(char c,int n)  
 *  @brief A member function.
 *  @param c a character.
 *  @param n an integer. 
 *  @exception std::out_of_range parameter is out of range. 
 *  @return a character pointer. 
 */

今天暂时到这,明天继续学习Doxygen的特殊命令字。