gpt4 book ai didi

objective-c - 嵌套 block 编程

转载 作者:行者123 更新时间:2023-12-04 03:13:21 28 4
gpt4 key购买 nike

根据这个 block 编程教程:

http://thirdcog.eu/pwcblocks/

下面的嵌套 block :

void (^(^myblockptr)(void (^)()))();

是一个指向 block 的指针,返回一个 block 占用一个 block

它说它等同于:

typedef void (^Block)();
Block (^myblockptr)(Block);

我猜 (void (^)()) 对应于参数,即 (Block)。但是,我看不到嵌套表达式的哪一部分对应于返回的 block 。

您能否识别嵌套表达式中的返回 block ?

最佳答案

正如 Joshua 所说,在分析 C 声明时,最好从内到外开始。

void (^(^myblockptr)(void (^)()))();

因为 myblockptr 是变量,让我们把声明分成两部分,在变量的左边和在变量的右边:

void (^(^myblockptr)    (void (^)()))();

我们知道 (^myblockptr) 是一个 block ,因为 ^,所以在它的左边我们应该找到它的返回类型,在它的右边我们应该找到它的参数类型。

让我们分析一下 myblockptr 接受的参数,向右移动。它们应该在 (^myblockptr) 之后用括号分组:

void (^(^myblockptr)    (void (^)())    )();

是单个参数,因为^是一个block:

void (^)()

现在很容易看出参数是一个返回 void 且不带参数的 block 。

再往右移动,有一个右括号,所以我们需要分析最左边的部分:

void (^    (^myblockptr)…

我们看到 myblockptr 返回一个返回 void 的 block 。由于它返回一个 block ,我们应该在与最左边的左括号匹配的右括号之后找到返回的 block 接受的​​参数类型:

void (^    (^myblockptr)(void (^)())    )();

因为它是 (),我们看到返回的 block 没有任何参数。

enter image description here

总而言之:myblockptr 是一个(在右边)接受参数的 block ,该参数是一个 不带参数并返回 void 并(向左)返回一个 block ,该 block 不带任何参数并返回 void。由于 myblockptr 的返回类型和(单个)参数类型相同:

typedef void (^Block)();

导致:

Block (^myblockptr)(Block);

您可能想阅读 Steve’s Reading C type declarations并且,正如 Jeremy 所提到的,Fish’s cdecl.org .

关于objective-c - 嵌套 block 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7841975/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com