3

我有一种情况需要在 Doxygen 中记录 bsearch() 签名。该签名如下所示:

void * __cdecl bsearch (
    const void *key,
    const void *base,
    size_t num,
    size_t width,
    int(__cdecl *compare)(const void *, const void *)
    )

我遇到的问题是如何为指针*compare 编写@param 命令,因为Doxygen在我抛出的所有内容中都抱怨“在bsearch 的参数列表中找不到命令@param 的参数'compare' ”。

这是一个独立的实现,因此它不依赖于库签名,但是我在想如果我这样做了:

typedef int(__cdecl *pcompare)(const void *, const void *);

将签名更改为 pcompare 比较使用标准签名的调用者会出现类型问题。

我愿意接受任何允许我在没有 Doxygen 警报的情况下记录这一点的解决方案。

4

2 回答 2

5

但是我在想如果我这样做了:

typedef int(__cdecl *pcompare)(const void *, const void *);

使用标准签名将签名更改为pcompare compare调用者会出现类型问题。

你应该在放弃之前尝试过。 typedef不定义新类型,它只是为复杂类型创建一个新标识符。生成的签名是相同的。

不过要小心,因为显示的表格都不是正确的签名。bsearch要像您需要的那样声明 AC 运行时库函数extern "C"。(函数指针 typedef 也是如此——语言链接是函数类型的一部分)

综上所述,仅__cdecl在 doxygen 配置中设置为预定义的宏就足以允许它解析所有这些变体,包括具有一组复杂标记指定参数类型的变体。

于 2015-05-10T19:16:48.123 回答
1

typedef 没有问题。
无论如何你都应该使用它——它更容易阅读。

于 2015-05-10T19:17:19.783 回答