我想在 C 中声明一个递归函数类型(声明自身的函数)。
在像 Go 这样的语言中我可以这样做:
type F func() F
func foo() F {
return foo
}
如果我尝试在 C 中做同样的事情:
typedef (*F)(F());
我从 GCC 收到以下错误:
main.c:1:14: error: unknown type name ‘F’
1 | typedef (*F)(F());
这是有道理的,因为 F 在使用时并不存在。前向声明可以解决这个问题,如何在 C 中前向声明函数类型?
C 不支持递归类型定义。
例外:您可以使用指向尚未声明的结构类型的指针,因此结构类型可以包含指向正在声明的结构类型的结构的指针。
此外,您显然可以使用尚未声明为函数的返回值的结构类型。所以这很接近你想要的: