我想弄清楚如何声明一个函数,该函数返回一个指向返回函数的函数的指针。这是一个循环问题,我不知道这是否可以在 c 中完成。这是我正在尝试做的一个说明性示例(它不起作用):

typedef (*)(void) (*fp)(void);

fp funkA(void) {
    return funkB;
}

fp funkB(void) {
    return funkA;
}

最佳答案

要在C语言中创建像这样的完全循环类型,必须使用struct(或union)。在 C99 中:

typedef struct fpc {
    struct fpc (*fp)(void);
} fpc;

fpc funkB(void);

fpc funkA(void) {
    return (fpc){ funkB };
}

fpc funkB(void) {
    return (fpc){ funkA };
}

在 C89 中,您没有复合文字,因此您必须执行以下操作:
fpc funkA(void) {
    fpc rv = { funkB };
    return rv;
}

fpc funkB(void) {
    fpc rv = { funkA };
    return rv;
}

关于C中的循环函数指针问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6786810/

10-10 14:41