指向返回指向同一函数类型的指针的函数的指针

时间:2014-07-30 14:43:27

标签: c function-pointers

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)();
}

1 个答案:

答案 0 :(得分:1)

你在第一部分是正确的,你不能在C中使用直接递归类型。

但你的解决方法与UB发生冲突:

数据指针和函数指针是根本不同的类型,无法保证往返转换:
只需使用任何旧的函数类型作为函数指针,它们都是相互往返的可转换函数。

除此之外:使void*和函数指针兼容是标准中提到的常见扩展 POSIX,Windows和MacOS可以做到:

  

J.5.7 [common extensions]函数指针强制转换

     

1指向对象或void的指针可以转换为指向函数的指针,允许数据   被作为一个函数调用(6.5.4)   2指向函数的指针可以强制转换为指向对象的指针或使其无效,从而允许a   要检查或修改的功能(例如,通过调试器)(6.5.4)。