^{ <stmts..> }() 在 C 中是什么意思?
What does ^{ <stmts..> }() mean in C?
在阅读一份 LLVM 静态分析器文档时,我偶然发现了一个 奇怪的 运算符。
^{ int y = x; }();
我知道我可以在 { ... } 之类的函数中定义嵌套块,但我们甚至可以 调用 它吗?此外,我从未见过将 ^ 放在花括号块前面的任何用法。我认为这是 GCC 支持的一种语言扩展,并使用 anonymous function 或 lambda 之类的关键字进行了搜索,但无济于事。有人知道吗?
来自 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
的块文字,并在声明后立即执行。
在阅读一份 LLVM 静态分析器文档时,我偶然发现了一个 奇怪的 运算符。
^{ int y = x; }();
我知道我可以在 { ... } 之类的函数中定义嵌套块,但我们甚至可以 调用 它吗?此外,我从未见过将 ^ 放在花括号块前面的任何用法。我认为这是 GCC 支持的一种语言扩展,并使用 anonymous function 或 lambda 之类的关键字进行了搜索,但无济于事。有人知道吗?
来自 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
的块文字,并在声明后立即执行。