gpt4 book ai didi

带有 void 指针参数的回调产生警告

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:44 25 4
gpt4 key购买 nike

我有以下代码:

/* callback taking a pointer to a "generic" msg as argument */
typedef void (*Callback_t)(void *msg);

/* initialize callback pointer */
Callback_t const Callback[] =
{
ProcessMsgAction0, /**< 0: MSGID_ACTION_0 */
ProcessMsgAction1, /**< 1: MSGID_ACTION_1 */
/* ... */
};

/* Call the callback according to msgid */
msg = GetMessage();
Callback[msg->id](msg);

/* implement callback for each message id */
void ProcessMsgAction0(action0_t *msg) { /* ... */ }
void ProcessMsgAction1(action1_t *msg) { /* ... */ }

虽然 void* 被认为是通用指针。因此,无论我给它什么地址,它都不会产生警告,但在上面的例子中,action0_t*void* 不同,因此它会产生以下警告:initialization from incompatible pointer输入

如果我想抑制警告,我唯一的解决方案是将 ProcessMsgAction 参数更改为 void* 吗?

使用的编译选项:-ansi -pedantic -Wall -Wextra

最佳答案

I though void* was considered as generic pointer

这是对的,但这个概念并没有扩展到函数类型中的匹配参数。

Callback_t 的简单类型转换仍然有效,see this functional example on ideone.

关于带有 void 指针参数的回调产生警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25374477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com