首页 > 解决方案 > ^{ 是什么意思}() 在 C 中是什么意思?

问题描述

在此处输入图像描述

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

^{ int y = x; }();

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

标签: csyntaxobjective-c-blocks

解决方案


来自Clang 9 Documentation Language Specification for Blocks,它是一个Block Literal Expression。它的形式为(来自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在声明执行之后立即执行。


推荐阅读