c - 这里发生了什么?从范围内返回一个值?
问题描述
我有这个代码:
#include <stdio.h>
int main(void)
{
int x;
x = ({ int y=42; y; }); // What?
printf("%d\n", x);
}
这打印 42。但我必须说我不明白。的值如何y
分配给x
?这是我以前在 C 中从未见过的东西。
我试图删除括号,但后来我得到了这个:
error: expected expression before ‘{’ token
6 | x = { int y=42; y; };
|
有人可以解释一下这里发生了什么吗?
解决方案
经过一番修补,我得出结论,它是一个编译器扩展,因为当我用它编译时,-pedantic
我得到了这个:
warning: ISO C forbids braced-groups within expressions [-Wpedantic]
6 | x = ({ int y=42; y; });
| ^
推荐阅读
- keycloak - Slowloris 的 keycloak 设置 - mod_reqtimeout
- r - 如何找到第三名的学生?
- javascript - 如何从新的 MetaMask 以太坊 API 中获取账户列表?
- oauth-2.0 - OTK(开放令牌)与 JWT
- python - 为什么数据框仅将迭代的最后一个值导出到 csv?(Python)
- python - 使用 Selenium 进行动态网页抓取
- node.js - 拒绝访问 nsis 电子生成器
- c# - 不能在列表中添加元素(在 C# 中)
- jpa - JPA 休眠多对一。删除一个
- flutter - 为什么我会收到此错误错误状态:使用 Firestore 时 DocumentSnapshotPlatform 中不存在字段?