c - 这个类似匿名的 C 块是什么意思?
问题描述
我在阅读参考资料时看到了类似的代码,我尝试了这段可以编译和运行的代码:
#include <stdio.h>
int x;
void main() {
(void) ({ x = 0x1234; });
printf("x=0x%x\n", x);
}
但我不知道我应该如何解释这一行:(void) ({ x = 0x1234; });
. 我的意思是,它看起来像一个匿名函数,不接受任何参数并返回 void?我认为不是。而且我没有找到任何关于这种奇怪语法的参考,我应该如何理解它,并且有任何语法参考吗?
解决方案
它是一个 GCC 扩展(不是标准 C),称为statement-expression。其中的语句被求值,它的值是在其中求值的最后一个表达式语句的值。
您显示的示例没有用,因为该值被强制转换为 丢弃void
。