我试图声明一个函数,它接受与参数相同类型的函数.
void rec(void(*f)(void(*)(void(*)(...))))
{
    f(f);
}
我最终做了递归尝试.
你总是可以从一个演员void*.
void rec(void* f)
{
    ((void(*)())f)(f);
}
但它不是类型安全的
我尝试用以下方法做到这一点typedef:
typedef void(*RecFunc)(RecFunc);
但是没有编译.
有可能吗?
您不能以一致的方式直接执行此操作,但是如果将函数指针放在包装器结构中,则可以:
struct F;
typedef void(*RecFunc)(struct F *);
struct F {
    RecFunc f;
};
我们首先向前声明结构体,以便 typedef 可以使用它。然后我们定义结构体来包含函数指针。在这种情况下,递归函数类型被定义为采用指向 的指针struct F,但如果它采用 的实例,它仍然可以工作struct F。
然后你可以像这样使用它:
void f(struct F *sf)
{
    static int x=5;
    if (x) {
        printf("x=%d\n",x);
        x--;
        sf->f(&(struct F){f});
    }
}
int main()
{
    f(&(struct F){f});
    return 0;
}
输出:
x=5
x=4
x=3
x=2
x=1