【问题标题】:Recursively declare function in C languageC语言递归声明函数
【发布时间】:2011-09-04 08:02:50
【问题描述】:

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

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

  1. F 的返回类型是“void”
  2. F的参数是一个函数指针,这个指针指向一个 类型与F相同的函数

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

【问题讨论】:

    标签: c function recursion compilation declare


    【解决方案1】:

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

    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())的函数类型的兼容性规则指定为:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多