gpt4 book ai didi

c - 关于函数指针的声明

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:50 24 4
gpt4 key购买 nike

我在思考两者之间的区别:

void *signal(int, void (*)(int))(int)

void (*signal(int, void (*)(int)))(int)

我知道后者来自 here - Example #3: The ``Ultimate'' (当我尝试大声说来理解它时,这是一次有趣的学习经历):

signal is a function takes (int, void (*)(int)) as input and returns a pointer to another function that takes (int) and returns void.

对于前者,我认为由于最后一个 (int) 的优先级高于 * 所以它应该是一个语法错误,但是来自 cdecl.org结果是:

["] 将信号声明为函数(int,指向函数 (int) 的指针返回 void)返回函数 (int) 返回指向 void 的指针 [."]

所以我需要一张支票。

最佳答案

必须区分语法和语义。 cdecl.org只为您提供您输入的任何声明符的语法含义。在您的第一个示例中,您确实在语法上正确地将 signal 声明为返回函数的函数。但是,C 不允许函数返回其他函数:

N1570 6.7.6.3 §1:

A function declarator shall not specify a return type that is a function type or an array type.

所以虽然这个声明在语法上是正确的,但它在语义上是无效的。换句话说:虽然 C 语法使编写“返回函数的函数”成为可能,但不允许您在程序中实际拥有返回函数的函数。就像英语(或与此相关的任何语言)也可以让你表达各种各样的想法,而这些想法在 body 上是不可能实现的……

关于c - 关于函数指针的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com