^ {<stmts ..>}()在C中意味着什么?

Gwa*_*Lee 9 c syntax objective-c-blocks

在此输入图像描述

在读取LLVM静态分析器文档中的一个时,我偶然发现了一个奇怪的操作符.

^{ int y = x; }();
Run Code Online (Sandbox Code Playgroud)

我知道我可以在{...}这样的函数中定义一个嵌套块,但我们甚至可以调用它吗?此外,我从未见过将^放在花括号块前面的任何用法.我认为这是GCC支持的一种语言扩展,并用匿名函数或lambda等关键字搜索,但无济于事.有没有人对此有任何想法?

Kam*_*Cuk 9

来自Clang 9文档块的语言规范它是块文字表达.它的形式为(来自wiki):

^return_type ( parameters ) { function_body }
Run Code Online (Sandbox Code Playgroud)

但:

如果省略返回类型且参数列表为(void),则也可省略(void)参数列表.

下列:

^{ int y = x; }();
Run Code Online (Sandbox Code Playgroud)

等于:

( ^void (void) { int y = x; } )();
Run Code Online (Sandbox Code Playgroud)

等于:

void (^f)(void) = ^void (void) { int y = x; };
f();
Run Code Online (Sandbox Code Playgroud)

它声明了一个块文字,它int y = x在声明执行后立即执行.

  • @KamilCuk如果您编写iOS或macOS代码,它会很受欢迎。正如您所说,不应在跨平台代码中使用块。 (2认同)