3

adream307 有一个问题,我不知道,你的呢?

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

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

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

4

1 回答 1

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())为:

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

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

于 2011-05-29T15:04:41.437 回答