宏扩展中的Doxygen简要说明 考虑C++声明宏: #define DECLARE_OBJECT_HANDLE(x) \ typedef struct x##HandleTag *x##Handle; \ typedef struct x##Handle *P##x##Handle

宏扩展中的Doxygen简要说明 考虑C++声明宏: #define DECLARE_OBJECT_HANDLE(x) \ typedef struct x##HandleTag *x##Handle; \ typedef struct x##Handle *P##x##Handle,c++,doxygen,C++,Doxygen,我想用一些doxygen注释标记我的第二个指针声明。理想情况下,我希望第二个句柄引用第一个句柄,并且只提供简短的描述,说明它是指向此类型的指针 我已更改我的宏: #define DECLARE_OBJECT_HANDLE(x) \ typedef struct x##HandleTag *x##Handle; \ /** * \brief Pointer to x##Handle. */ \ typedef struct x##Handle *P##x##Handle 当我发现它不知怎么起作用

我想用一些doxygen注释标记我的第二个指针声明。理想情况下,我希望第二个句柄引用第一个句柄,并且只提供简短的描述,说明它是指向此类型的指针

我已更改我的宏:

#define DECLARE_OBJECT_HANDLE(x) \
typedef struct x##HandleTag *x##Handle; \
/**
* \brief Pointer to x##Handle.
*/ \
typedef struct x##Handle *P##x##Handle
当我发现它不知怎么起作用时,我真的很惊讶! 不幸的是,每个typefef都有一个额外的部分,其中包含一些奇怪的字符:

我真的很讨厌最下面的部分,因为我没有更多的话要说。这是doxygen中的一个bug吗?当我只要求简要描述时,它会产生额外的部分

有什么方法可以预防它吗


PS:我正在Windows 8.1 64位上使用doxygen版本1.8.12。

如果混合使用定义、注释和typedef,doxygen将很难获得正确的流。也许下面给出了一些提示/想法(因为您试图实现的目标还不是100%清楚):


正如评论中所指出的,我所指的奇怪角色是无序列表中的一个项目符号

我在doxygen开发列表上问了这个问题,但没有人回答

解决方案:

省略
*
命令前面的
\brief
doxy


PS:原始代码在宏扩展之外的任何地方都能工作。

那个奇怪的字符是无序列表中的一个要点。您是否尝试过在
\brief
doxy命令前面省略
*
?@Torbjörn谢谢,它成功了!你有什么解释,为什么会这样,还是只是胡乱猜测?我对doxygent没有太多的经验,这是一个有根据的猜测,因为行首的星号表示降价中的无序列表。您可以在关闭Doxyfile中的Markdown支持时调查实际情况是否如此。你可以考虑向DyxGeDes报告一个bug。当我关闭标记支持时,不再是子弹,而是星号。无论如何,当我在注释之外的任何地方使用相同的语法时,我得到了正确的行为。我甚至不知道,doxycommand应该在第一行。你还认为值得报道吗?在星号前缺少一个空格,以便与评论开头对齐。Doxygen应该期望空间能够识别这种评论风格。我试图让你的想法起作用,但嵌套的宏对我不起作用。我想声明一个指向某个结构的不透明指针,同时声明一个指向它的指针,它只有一个简短的描述。然而,由于未知的原因,这不仅仅是一个简短的描述(列表中的项目符号)。原因似乎是,我没有将\brief关键字放在第一行,但有一个额外的星号,它被解释为列表的开始。这就是宏和常规代码之间的区别,在这里我可以使用正确的行为将\brief命令放在单独的行中。
/**  Handle */
#define HT(x) \
typedef struct x##HandleTag *x##Handle

/** Pointer to #HT(x) */
#define PHT(x) \
typedef struct x##Handle *P##x##Handle

/** Doing both */
#define DECLARE_OBJECT_HANDLE(x) \
HT(x); \
PHT(x)