c - ^{ 是什么意思}() 在 C 中是什么意思?
问题描述
在阅读 LLVM 静态分析器文档时,我偶然发现了一个奇怪的运算符。
^{ int y = x; }();
我知道我可以在像 { ... } 这样的函数中定义一个嵌套块,但我们甚至可以调用它吗?此外,我从未见过将^放在大括号块前面的任何用法。我认为这是 GCC 支持的一种语言扩展,并使用匿名函数或lambda等关键字在 Google 上搜索,但无济于事。有没有人对此有任何想法?
解决方案
来自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
在声明执行之后立即执行。
推荐阅读
- ios - 如何为多个产品配置 xcode 项目?
- flutter - 在单击项目构建器 Flutter 的行视图时刷新 ListView.builder
- vue.js - 多参数 InertiaJS 路由
- r - 如何根据状态为图表着色
- terminal - tmux:如何判断窗格当前是否通过管道传输?
- swift - SwiftUI Preview 找不到使用过的框架的图像
- angular - 带有组和未分组项的 Angular ng-select 菜单
- github - 当我尝试在 git 中上传文件时
- python-3.x - 如何解决Datacamp python课程的字典这个问题?
- python - matplotlib 图例多次显示相同的标签(使用标签向量)