C语言递归声明函数

发布于 2024-11-10 05:14:35 字数 191 浏览 0 评论 0原文

收到 adream307 的问题,我不知道,你的呢?

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

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

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

got a question from adream307, I have no idea, what about yours?

I want to declare a function like this:
(we named this type of function as F)

  1. the return type of F is "void"
  2. the parameter of F is a function pointer, this pointer point to a
    function whose type is the same as F

can i declare a function like this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

星星的轨迹 2024-11-17 05:14:35

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

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

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

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

No you cannot. The type cannot be expressed, since it would repeat itself:

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

But you can write a function which accepts itself, without any problems. Consider

void f(void g()) { }

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

That's perfectly fine. The parameter type of f is a function pointer (void g() is equivalent to void (*g)() here) whose type is compatible with the type of f. The rule for compatibility for the function types of both the parameter of f and the argument in the call, void() and void (void()) is specified as:

If one type has a parameter type list [the call argument] and the other type is specified by a function declarator that is not part of a function definition and that contains an empty identifer list [the function parameter type], the parameter list shall not have an ellipsis terminator and the type of each parameter shall be compatible with the type that results from the application of the default argument promotions.

Both types satisfy this compatibility rule, so the function call is well defined.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文