什么^ { }(c)中是什么意思?

问题描述 投票:9回答:1

enter image description here

在阅读LLVM静态分析器文件之一,我偶然发现了一个奇怪的运营商。

^{ int y = x; }();

我知道我可以这样定义一个函数{...}里面嵌套块,但我们甚至打电话了吗?此外,我从未见过的任何使用放置^在大括号块的前面。我认为这是一种由GCC支持的语言扩展,并与像匿名函数或lambda关键字用Google搜索这个,但无济于事。是否有任何人谁拥有这方面有任何想法?

c syntax objective-c-blocks
1个回答
9
投票

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后,立即宣布实行的是。

© www.soinside.com 2019 - 2024. All rights reserved.