我使用指针数组(这是函数的地址)。
我正在为他们解析多种类型的数据(char *
,int
等)。
为了避免任何类型错误,请使用倍数void *
。
这就是为什么我感到困惑,因为编译器说它们是不兼容的类型(因此,当我编译它时它会工作)。
数组原型是:void *(*arg_handler[4])(void *arg);
我使用名为list的函数来保存不同的地址并返回具有特定参数的函数地址:
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]
for:
arg_handler[0] = &my_putstr;
arg_handler[1] = &my_put_printable;
arg_handler[2] = &my_put_nbr;
arg_handler[3] = &my_put_nbr;
任何想法?
答案 0 :(得分:-1)
正如alk所说,警告出现是因为4个函数没有输入void *
。因此,我没有为每种类型创建数组,而是将函数转换为void *
,如下所示:
arg_handler[0] = (void *)my_putstr;
arg_handler[1] = (void *)my_put_printable;
arg_handler[2] = (void *)my_put_nbr;
arg_handler[3] = (void *)my_put_nbr;