用C语言递归声明函数

时间:2011-05-29 15:00:22

标签: c function recursion compilation declare

从adream307那里得到一个问题,我不知道,你呢?

  

我想声明一个这样的函数:   (我们将这种类型的函数命名为F)

     
      
  1. F的返回类型为“void”
  2.   
  3. F的参数是函数指针,该指针指向a   类型与F
  4. 相同的函数         

    我可以声明这样的函数吗?

1 个答案:

答案 0 :(得分:7)

不,你不能。该类型无法表达,因为它会重复:

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

但你可以写一个接受自己的功能,没有任何问题。考虑

void f(void g()) { }

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

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

  

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

两种类型都满足此兼容性规则,因此函数调用已明确定义。