C++ 函数指针作为 Doxygen 中的参数

标签 c++ doxygen bsearch

我有一种情况需要在 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 警告的情况下记录这一点的解决方案持开放态度。

最佳答案

however I am thinking if I did:

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

changing the signature to pcompare compare that callers using the standard signature would have a type problem.

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

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

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

关于C++ 函数指针作为 Doxygen 中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30155601/

相关文章:

doxygen - doxygen成员分组不按文档中的方式工作

c - 为什么调用 bsearch() 会使呈现的程序崩溃?

c# - 将 C++ 例程转换为 C#,主要是指针

c++ - 关于ipp镜像构建

c++ - 为什么像/* */need '<' 这样的 C 注释?

linux - Doxygen Linux "make install"错误

c++ - STL有什么了不起的?

c++ - std::underlying_type :SFINAE 是否可以防止未定义的行为?

c++ - 找不到 bsearch(vc2008) 甚至包括头文件