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

What does ^{ <stmts..> }() mean in C?

在阅读一份 LLVM 静态分析器文档时,我偶然发现了一个 奇怪的 运算符。

^{ int y = x; }();

我知道我可以在 { ... } 之类的函数中定义嵌套块,但我们甚至可以 调用 它吗?此外,我从未见过将 ^ 放在花括号块前面的任何用法。我认为这是 GCC 支持的一种语言扩展,并使用 anonymous functionlambda 之类的关键字进行了搜索,但无济于事。有人知道吗?

来自 Clang 9 Documentation Language Specification for Blocks it's a Block Literal Expression. It has the form of (from wiki):

^return_type ( parameters ) { function_body }

但是:

If the return type is omitted and the argument list is ( void ), the ( void ) argument list may also be omitted.

以下:

^{ int y = x; }();

等于:

( ^void (void) { int y = x; } )();

等于:

void (^f)(void) = ^void (void) { int y = x; };
f();

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