C 如何使用与函数具有相同签名的参数声明函数?

C 如何使用与函数具有相同签名的参数声明函数?,c,C,我怎样才能声明一个函数,它将函数指针作为参数,指向一个与函数具有相同签名的函数 在gcc中,不起作用的是 foo_t * f(bar_t const *, typeof(f) *); 或 如果可能的话,我不想强制转换为void*并返回。您可以使用前向声明的结构来中断类型递归(这大致类似于C++中的函子或可调用对象) struct-Func; typedef foo_t*(*Func)(bar_t const*b,struct Func*); 结构Func{Func被调用方;}; foo_t*f

我怎样才能声明一个函数,它将函数指针作为参数,指向一个与函数具有相同签名的函数

在gcc中,不起作用的是

foo_t * f(bar_t const *, typeof(f) *);


如果可能的话,我不想强制转换为void*并返回。

您可以使用前向声明的结构来中断类型递归(这大致类似于C++中的函子或可调用对象)

struct-Func;
typedef foo_t*(*Func)(bar_t const*b,struct Func*);
结构Func{Func被调用方;};
foo_t*f(bar_t const*b,结构函数*Func){
Func nextfunc={f};

return func->callee(b,nextfunc);/*听起来签名是无限递归的
typedef foo_t (* f_t)(bar_t const *, f_t);
f_t f;
struct Func;
typedef foo_t *(*FuncFunc)(bar_t const *b, struct Func *);

struct Func { FuncFunc callee; };
foo_t * f(bar_t const *b, struct Func *func) {
  Func nextfunc = { f };
  return func->callee(b, nextfunc); /* <-- infinite recursion */
}