繁体   English   中英

typedef函数指针递归

[英]typedef function pointer recursive

我试图声明一个函数,它接受与参数相同类型的函数。

void rec(void(*f)(void(*)(void(*)(...))))
{
    f(f);
}

我最终做了递归尝试。

你总是可以从void*投射。

void rec(void* f)
{
    ((void(*)())f)(f);
}

但它不是类型安全的

我尝试使用typedef执行此操作:

typedef void(*RecFunc)(RecFunc);

但是没有编译。

有可能吗?

你无法做你想做的事。 正如您所注意到的,您最终尝试生成递归的typedef 语言不支持这一点。

您不能以一致的方式直接执行此操作,但是如果将函数指针放在包装器结构中,则可以:

struct F;
typedef void(*RecFunc)(struct F *);

struct F {
    RecFunc f;
};

我们首先向前声明结构,以便typedef可以使用它。 然后我们定义结构以包含函数指针。 在这种情况下,resursive函数类型被定义为获取指向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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM