在阅读LLVM静态分析器文件之一,我偶然发现了一个奇怪的运营商。
^{ int y = x; }();
我知道我可以这样定义一个函数{...}里面嵌套块,但我们甚至打电话了吗?此外,我从未见过的任何使用放置^在大括号块的前面。我认为这是一种由GCC支持的语言扩展,并与像匿名函数或lambda关键字用Google搜索这个,但无济于事。是否有任何人谁拥有这方面有任何想法?
从Clang 9 Documentation Language Specification for Blocks就是块文字表达式。它有(从wiki)的形式:
^return_type ( parameters ) { function_body }
但:
如果省略了返回类型和参数列表(无效),也可以省略(无效)的参数列表。
下列:
^{ int y = x; }();
等于:
( ^void (void) { int y = x; } )();
等于:
void (^f)(void) = ^void (void) { int y = x; };
f();
它声明块文字,做int y = x
后,立即宣布实行的是。