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