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

pxl*_*pxl 1 objective-c

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

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

long long (^blockFun)() = (long long (^)())moreBlockFun;
Run Code Online (Sandbox Code Playgroud)

我认为它正在尝试创建一个块,它需要一个返回long的块,我认为它也会在某个地方进行一些转换.

Ada*_*ght 7

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

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

  • (1)使用typedef.它为疯狂的指针语法增加了理智.(2)在创建Blocks语法时,我意识到它更容易理解函数指针.基本上,取任何块声明,用*替换^,你有相同的函数指针!:) (4认同)