用C语言递归声明函数



收到来自地址307的问题,我不知道,你的呢?

我想声明一个函数,如下所示:(我们将这种类型的函数命名为F)

  1. F的返回类型是"0";"无效"
  2. F的参数是一个函数指针,该指针指向类型与F相同的函数

我可以这样声明一个函数吗?

不可以。类型无法表达,因为它会重复自身:

void f(void g(void h(...

但是,您可以编写一个接受自身的函数,而不会出现任何问题。考虑

void f(void g()) { }
int main(void) { f(f); }

那很好。f的参数类型是一个函数指针(这里void g()相当于void (*g)()),其类型与f的类型兼容f的参数和调用中的参数void()void (void())的函数类型的兼容性规则指定为:

如果一个类型具有参数类型列表[调用参数],而另一个类型由函数声明符指定,该函数声明符不是函数定义的一部分并且包含空标识符列表[函数参数类型],参数列表不应具有省略号终止符,并且每个参数的类型应与应用默认参数提升所产生的类型兼容。

这两种类型都满足此兼容性规则,因此函数调用定义良好。

最新更新