Gwa*_*Lee 9 c syntax objective-c-blocks
在读取LLVM静态分析器文档中的一个时,我偶然发现了一个奇怪的操作符.
^{ int y = x; }();
Run Code Online (Sandbox Code Playgroud)
我知道我可以在{...}这样的函数中定义一个嵌套块,但我们甚至可以调用它吗?此外,我从未见过将^放在花括号块前面的任何用法.我认为这是GCC支持的一种语言扩展,并用匿名函数或lambda等关键字搜索,但无济于事.有没有人对此有任何想法?
来自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在声明执行后立即执行.