【问题标题】:Documenting callback typedefs in Doxygen在 Doxygen 中记录回调 typedef
【发布时间】:2011-01-28 18:32:10
【问题描述】:

我有以下类型定义:

typedef void( __cdecl *tCallback )( const char* Message );

如何使用 Doxygen 正确记录这些内容?

我希望记录 tCallback 和预期的参数。

一个简单的例子:

/// \typedef test
typedef test bool

在 doxygen 中产生正确的输出

//typedef tCallback
typedef void( __cdecl *tCallback )( const char* Message );

产生:

C:/test.cpp:2: warning: Found ';' while parsing initializer list! (doxygen could be confused by a macro call without semicolon)
C:/test.cpp:1: warning: member with no name found.

//typedef void( __cdecl *tCallback )
typedef void( __cdecl *tCallback )( const char* Message );

产生与上述相同的结果。

【问题讨论】:

  • Doxygen and typedefs 的可能重复项,这表明如果 typedef 名称位于命名空间内或嵌套在其他类型中,您可能需要正确限定它
  • 不是重复的,因为该问题要求简单的类型定义而不是像这样的复杂类型。那里的答案没有帮助,我先搜索了。
  • 有人想告诉我为什么要关闭投票吗?这里没有重复。上面指出的重复只是命名空间中的 typedef,命名空间导致了问题。这个问题不相关。
  • @gbrandt 这似乎与@Ben 链接的问题重复。为什么复杂的 typedef 行为会有所不同?你能用一个例子来更新你的问题吗?
  • @gbrandt 如果你删除 __cdecl 问题会重现吗?

标签: c++ doxygen typedef


【解决方案1】:

将以下内容添加到您的 Doxyfile:

PREDEFINED = __cdecl=

这将导致 Doxygen 出于文档目的而忽略此标识符。

【讨论】:

  • 在某些情况下(在我的情况下)更好的是使用 'PREDEFINED = __cdecl :=' 以便无法重新分配 __cdecl。
  • 小精度:你也需要激活宏扩展(MACRO_EXPANSION = YES),否则PREDEFINED不会有任何效果。
  • 但是,您的文档将不会显示正确的回调签名,对吧? __cdecl 将不会显示在文档中,如果用户从文档而不是标题中复制签名,这可能会导致问题(至少编译器错误)。在我看来,应该有一种方法可以让文档以与代码中相同的方式显示 typedef。
  • @dlchambers:调用约定受编译器选项的影响,但文档也没有显示这些。
猜你喜欢
  • 1970-01-01
  • 2016-05-06
  • 2016-02-07
  • 2017-08-25
  • 1970-01-01
  • 2021-12-03
  • 2020-04-20
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多