Doxygen:如何使用 EXPAND_AS_DEFINED

问题描述 投票:0回答:2

我定义了以下宏,并尝试在生成文档时对其进行扩展。

#define GETSET(param) \
bool CYNOVE_Enable##param(postproc_ctx_t ctx, bool enable)  \
{                                                           \
 struct postproc_ctx * c;                                   \
 c = (struct postproc_ctx *)ctx;                            \
 c->do_##param = enable?1:0;                                \
 return TRUE;                                               \
}                                                           \

在 doxygen 中,如果我使用:

MACRO_EXPANSION = YES

然后当我使用宏时它会被扩展。 但是如果设置了:

MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
EXPAND_AS_DEFINED = GETSET

宏未展开

因为我认为,其中一个答案是错误的,但评论对于任何冗长的解释来说都很糟糕,让我补充一下我认为这应该如何工作。

根据 doxygen 文档和此链接,PREDEFINED 和 EXPAND_AS_DEFINED 有不同的用途。我知道 EXPAND_AS_DEFINED 用于选择性地扩展给定的宏,“因为它是在源代码中定义的”,因此得名,而 PREDEFINED 在这里赋予 Doxygen 宏的含义。

c doxygen
2个回答
0
投票

我认为正如其名称所示,它只会扩展预定义的宏。你应该放一些类似的东西

PREDEFINED += GETSET(param)="..."

在您的 Doxygen 文件中。

顺便说一句,因为您正在使用

bool

  • enable?1:0
    应该只是
    enable
    bool
    只不过是 C 中的
    0
    1
  • TRUE
    应该是
    true

0
投票

我使用提问者的配置选项进行了测试,宏正常展开。不知道doxygen更新是否解决了这个问题。

我的版本:在源文件上配置和运行 doxygen 版本 1.9.4 的工具。

t.c

#define GETSET(param) \
bool CYNOVE_Enable##param(postproc_ctx_t ctx, bool enable)  \
{                                                           \
 struct postproc_ctx * c;                                   \
 c = (struct postproc_ctx *)ctx;                            \
 c->do_##param = enable?1:0;                                \
 return TRUE;                                               \
}          

GETSET(123)


#define CONST_STRING const char *

CONST_STRING version = "2.xx";


此外,您可以使用

-d preprocessor
来检查宏展开后的代码是什么样子的。

© www.soinside.com 2019 - 2024. All rights reserved.