Я использую массив указателей (которые являются адресами функций). Я разбираю несколько типов данных (char *
, int
и т. Д.). Чтобы избежать ошибки типа, я использую кратные void *
. Вот почему я запутался, потому что компилятор говорит, что они несовместимые типы (при этом он работает, когда я его компилирую).назначение из несовместимого типа в массив указателя (c)
Прототип массива: void *(*arg_handler[4])(void *arg);
Я использую функцию с именем списка, чтобы сохранить разные адреса и возвращает адрес функции с конкретными аргументами:
void *list(int x, void *arg)
{
arg_handler[0] = &my_putstr;
arg_handler[1] = &my_put_printable;
arg_handler[2] = &my_put_nbr;
arg_handler[3] = &my_put_nbr;
return (arg_handler[x](arg));
}
Я звоню список из основная функция через:
list(f_type(s[x + 1]), va_arg(args, void *));
, но я не могу понять, почему я получил эту ошибку:
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
для:
arg_handler[0] = &my_putstr;
arg_handler[1] = &my_put_printable;
arg_handler[2] = &my_put_nbr;
arg_handler[3] = &my_put_nbr;
любая идея?
Его полное предупреждение? Я ожидал, что это будет более конкретным. – alk
Также вы получаете это предупреждение для какой строки кода? – alk
да это полное предупреждение –