【问题标题】:Documenting C typedefs in doxygen在 doxygen 中记录 C typedef
【发布时间】:2018-02-19 05:16:25
【问题描述】:

按照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:警告:没有记录复合内容

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

...test.h:12: 警告:whatsit 类的成员 foo(变量)没有记录

什么给了?我从手册中得到的印象是,当注释直接位于定义之前时,您不需要像 @struct 这样的标签,而且在上面的块中记录成员变量是合法的,而不是在它们的同一行上用/*< ... 语法声明。 (我绝对讨厌后一种风格……)

我怎样才能让它正确识别评论?

【问题讨论】:

  • 请注明您使用的doxygen版本。
  • 版本为 1.8.13

标签: c doxygen


【解决方案1】:

根据文档: 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;

【讨论】:

  • 好的,所以答案似乎是“您必须使用 @struct 标记,即使注释块直接位于之前”并且“您必须使用结构名称来限定变量名称,即使尽管注释块直接出现在“之前”并且“您必须在 @var 行和文档字符串之间放置一个换行符”。如果我放松其中任何一个,就会出现更多警告。这可能对我来说很特殊,但只是不认为我可以忍受这些(尤其是因为语法类似于 javadoc) - 太多的打字/词汇房地产。更新版本会有帮助吗?或者是时候寻找新的文档系统了。 =/
猜你喜欢
  • 1970-01-01
  • 2016-05-06
  • 2011-01-05
  • 2011-05-31
  • 2017-08-14
  • 1970-01-01
  • 2011-04-09
  • 2012-08-04
  • 2012-06-05
相关资源
最近更新 更多