C中是否可以有一个指向函数的指针,该函数返回指向同一类型函数的指针?即指向函数的指针,该函数返回指向函数的指针,该函数返回指向...等等函数的指针。
具有int返回类型的函数指针是:
int (*fp)(void);
所以我猜一个函数指针带有的函数指针
typedef int (*fp)(void);
fp (*pfp)(void);
但是指向返回相同类型函数的函数的指针会有......无限递归声明?即一个人永远不能写第一个typedef。 这是对的吗?
我认为解决方法是实际返回一个void指针,然后将其转换为函数指针类型? e.g。
typedef void * (*fp)(void)
void * stateWork(void) {return &nextStateWork}
machine () {
fp = &stateWork;
state = (fp)(*fp)();
}
答案 0 :(得分:1)
你在第一部分是正确的,你不能在C中使用直接递归类型。
但你的解决方法与UB发生冲突:
数据指针和函数指针是根本不同的类型,无法保证往返转换:
只需使用任何旧的函数类型作为函数指针,它们都是相互往返的可转换函数。
除此之外:使void*
和函数指针兼容是标准中提到的常见扩展
POSIX,Windows和MacOS可以做到:
J.5.7 [common extensions]函数指针强制转换
1指向对象或void的指针可以转换为指向函数的指针,允许数据 被作为一个函数调用(6.5.4) 2指向函数的指针可以强制转换为指向对象的指针或使其无效,从而允许a 要检查或修改的功能(例如,通过调试器)(6.5.4)。