У меня есть следующий код:
/* 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