[英]Difference between (function designator) and {function pointer}?
在 clang 中,指向 function 的指针和指示符/指示符具有不同的结果分组符号,括号与花括号相比,如在更下方的代码片段中所见。
什么是:
type * type(*)(type)
用于和对比/什么是:
type *(type)
用于? 大括号用于列表、复合语句和聚合,而圆括号主要用于排序、分组、转换和 arguments。
看起来第一个是对接受特定类型参数的 function 指针的类型引用,如果包含在括号中,则命令单独评估组(如果是较大表达式的一部分)或创建一个强制转换,在 function 的解析后将转换它以指定大小和 alignment 要求的返回类型的特定值代替包含该值的二进制序列。
第二个是在一个带有花括号的块中,因此是一个复合 object 或语句块,因为我看不到它如何附加到聚合,尽管它可能引用调用的 function 主体结果。
第二个片段看起来像是对定义的类型或 object 组的类型引用,并且由于类型可能不与 object 共享名称,因此有效地使其成为关键字,我认为这会以某种方式创建一个与自身相乘的命名 object,或者是反向转换或其他东西,因为除了 object 声明外,带星号的关键字没有实际用途。
P
为什么第一个符号用圆括号括起来,而第二个符号使用大括号?
例如,编译时的以下代码片段,
.
(*function)(1);
编译后注释中提到的符号记为:
(type *(*)(type))
括号包含控制台编译日志中的表示。
.
然而:
.
function(1);
编译后注释中提到的符号记为:
{type *(type)}
大括号包含控制台编译日志中的表示。
.
两者之间的区别是什么,在什么情况下它实际上适用于任何通常/有用的上下文?
我对 C 语言的语法和语义的一般观察表明,第一个似乎是一个基本的有序组表达式,可以在逗号分隔列表中使用或用作 function 参数,而第二个似乎是一个结构,联合或块语句。
我正在探索 function 指针,所以我尝试了两个,这两个注释是 clang 对编译的评论。 我阅读的其他 5 篇文章似乎都没有阐明任何上下文中分组符号的性质,但确实提供了对 function 指针及其应用的额外见解。
谢谢!
function 指示符是一个类型为 function 的表达式。
例如在
a = foo(x);
foo 是一个 function 指示符。
Function pointer
是对 function 的引用。Function 指示符在用作值时衰减为 function 指针。
int (*fptr)(int) = foo;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.