C中的匿名类型

时间:2011-12-01 19:04:26

标签: c

我在C中有以下递归类型定义,我想知道如何让它工作:

typedef int (*foo) (bar *);
typedef foo *bar;

指针的大小众所周知,所以这应该没问题。

我不知何故需要将声明栏转发为一些匿名类型,然后我可以正确地键入。不确定如何在C中执行此操作,因为它不是结构

我想避免将foo声明为:

typedef int (*foo) (void *)

因为我丢失了一些类型检查属性。

1 个答案:

答案 0 :(得分:1)

不幸的是,C中typedef没有前瞻声明。

UPD。

您可以按如下方式创建间接递归类型:

struct bar;
typedef int (*foo)(struct bar *);

struct bar {
    foo f;
};

然后通过参数字段获取指向函数的指针。但这需要将结构分配到某处(可能在堆栈上)和其他指针解除引用。

int boo(struct bar *bar) {
    return (bar->f)(bar); // infinite loop
}

int main(void) {
    struct bar baz = { &boo };
    return boo(&baz);
}