【发布时间】:2014-08-19 01:42:45
【问题描述】:
我有以下代码:
/* 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 type
如果我想抑制警告,我唯一的解决方案是将 ProcessMsgAction 参数更改为 void* 吗?
使用的编译选项:-ansi -pedantic -Wall -Wextra
【问题讨论】:
标签: c compiler-warnings void-pointers