我在C中有以下递归类型定义,我想知道如何让它工作:
typedef int (*foo) (bar *);
typedef foo *bar;
指针的大小众所周知,所以这应该没问题。
我不知何故需要将声明栏转发为一些匿名类型,然后我可以正确地键入。不确定如何在C中执行此操作,因为它不是结构
我想避免将foo声明为:
typedef int (*foo) (void *)
因为我丢失了一些类型检查属性。
答案 0 :(得分:1)
不幸的是,C中typedef
没有前瞻声明。
您可以按如下方式创建间接递归类型:
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);
}