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

李光武

在此处输入图片说明

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

^{ int y = x; }();

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

卡米尔库克

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

^return_type ( parameters ) { function_body }

但:

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

以下:

^{ int y = x; }();

等于:

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

等于:

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

它声明一个int y = x在执行完之后立即执行的块文字

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章