在doxygen中记录C语言typedef的定义

4

按照doxygen手册中的示例,我构建了测试头文件test.h

/**
 * @file test.h
 */

  /** @brief This is a struct 
   *  @var foo A foo.
   *  @var bar Also a Foo.
   *  @var baz (unused field)
   */
  typedef struct {
     int foo;
     int bar;
     char *baz;
  } whatsit;

当我使用默认的Doxyfile(使用“doxygen -g”生成)时,会看到警告信息:

...test.h:11: 警告:未记录复合whatshit

...test.h:7: 警告:记录的符号 `foo A Foo` 未定义

...test.h:12: 警告:类whatshit的成员变量foo(变量)未记录

为什么会这样呢?从手册中得知,当注释直接位于定义前面时,不需要像@struct这样的标记;还有,将成员变量记录在块上方而非用/*< ...语法与声明在同一行上是完全可以的。 (我确实非常讨厌后一种风格...)
如何才能使其正确地识别注释呢?

请指明您所使用的doxygen版本。 - albert
版本是1.8.13。 - BadZen
1个回答

8
根据文档: 24.51 \var(变量声明)
表示注释块包含变量或枚举值的文档(全局或作为类成员)。此命令等同于\fn、\property和\typedef。
在\var行指出只应该存在变量名称。由于变量foo不存在,但结构体成员whatsit :: foo存在,因此必须使用完全限定名称。
对于结构体也是相似的推理。
结果应该如下所示:
/**
 * @file test.h
 */

  /** @struct whatsit
   *  This is a struct
   *
   *  @var whatsit::foo
   *    A foo.
   *  @var whatsit::bar
   *    Also a Foo.
   *  @var whatsit::baz
   *    (unused field)
   */
  typedef struct {
     int foo;
     int bar;
     char *baz;
  } whatsit;

6
答案似乎是:“即使注释块紧接在变量定义之前,也必须使用@struct标记”,还有“即使注释块直接出现在变量定义之前,也必须用结构体的名称限定变量名”,以及“在@var行和文档字符串之间必须加入一个换行符”。如果我放宽了其中任何一个要求,就会出现更多警告。这可能只是我的个人喜好,但我认为我无法接受这些(特别是因为语法类似于Javadoc)——太多输入/字面空间。新版本是否有所帮助?还是该找一个新的文档系统。=/ - BadZen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接