Q什么是通用的通用指针类型?我的编译器在我尝试将函数指针塞入void *.
A没有“通用的通用指针类型”。
void *指针只能保证存储对象(即数据)指针;将函数指针转换为类型void *是不便携的。
但是,保证所有函数指针都可以相互转换,只要在调用之前将它们转换回适当的类型即可。因此,您可以选择任何函数类型(通常是int (*)()或void (*)()即指向参数不确定、返回int或void的指针)作为通用的函数指针。当您需要一个可以交替存储对象和函数指针的位置时,便携的解决方案是使用一个void *和一个通用的函数指针(您选择的任何类型)的联合体。
参考:ISO 第 6.1.2.5 节、第 6.2.2.3 节、第 6.3.4 节
Rationale 第 3.2.2.3 节
H&S 第 5.3.3 节,第 123 页