下面的代码不起作用。
int i = {(void) 999; 100;};
添加括号就可以了。为什么?
int i = ({(void) 999; 100;});
还有另一种方法可以完成此类分配:
int i = ((void) 999, 100);
是什么让他们与众不同?
在这份声明中
int i = {(void) 999; 100;};
大括号内使用了两个语句
(void) 999;
and
100;
作为初始化器。
这在语法上是无效的。要使用大括号括起来的列表来初始化标量对象,您可以仅使用一个赋值表达式,而不使用任何语句。
本次施工
int i = ({(void) 999; 100;});
也是无效的 C 结构。然而,括在括号中的复合语句可能会在 GNU C 中显示为表达式。它是它自己的语言扩展。表达式的值为 100。即变量 i 由值 100 初始化。
本声明
int i = ((void) 999, 100);
是唯一有效的 C 结构。括号内使用逗号运算符。表达式的值是表达式最右边的操作数 100。
事实上最后一个声明相当于
int i = 100;
编译器应发出警告,表明表达式 (void)999 无效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)