我正在尝试传递以下类型的函数:
int *(*)(int *,int *)
接受a作为参数的函数:
void *(*)(void *,void *)
有什么办法吗?
答案 0 :(得分:2)
您始终可以在C中显式地转换内容,因此可以转换(void *(*)(void *, void *))func
来传递函数指针。问题在于,如果被调用方随后尝试通过函数指针进行调用而没有先将其强制返回给int *(*)(int *, int *)
,则结果是未定义的行为。
现在可能是这样的情况,在您的特定ABI上它可能仍然可以工作(所有指针类型都具有相同的表示形式,并且以相同的方式作为参数传递),因此您可以摆脱它,但是它仍未定义的行为。这是一个很好的例子,说明该标准未充分说明可能导致滥用的事物。可以说这种事情至少应该是实现定义的,而不是未定义的。