什么“long long(^ blockFun)()=(long long(^)())moreBlockFun”是什么意思?

时间:2009-10-06 17:02:46

标签: objective-c

我正在努力学习和有效地使用Blocks。

在网络上,我遇到过这段代码:

long long (^blockFun)() = (long long (^)())moreBlockFun;

我认为它正在尝试创建一个块,该块需要一个返回long的块,我认为它也在某处进行了一些转换。

1 个答案:

答案 0 :(得分:7)

这是一个块类型转换,是的,语法不是很好。我们假设moreBlockFun是一个不带参数的块,并返回具有合理强制转换长度的东西 - 这种类型的签名写成long long (^)()。因此,我们为该块创建一个名为blockFun的新本地名称,其语法为long long (^blockFun)(),然后执行强制转换。

这是一个混乱,主要是从函数指针类型表示法继承,实际上每个 C程序员在记住它之前必须查找大约482次。你并不孤单!