我正在努力学习和有效地使用Blocks。
在网络上,我遇到过这段代码:
long long (^blockFun)() = (long long (^)())moreBlockFun;
我认为它正在尝试创建一个块,该块需要一个返回long的块,我认为它也在某处进行了一些转换。
答案 0 :(得分:7)
这是一个块类型转换,是的,语法不是很好。我们假设moreBlockFun
是一个不带参数的块,并返回具有合理强制转换长度的东西 - 这种类型的签名写成long long (^)()
。因此,我们为该块创建一个名为blockFun
的新本地名称,其语法为long long (^blockFun)()
,然后执行强制转换。
这是一个混乱,主要是从函数指针类型表示法继承,实际上每个 C程序员在记住它之前必须查找大约482次。你并不孤单!