逗号作为分隔符和运算符

2023-11-23

所以我在某个地方遇到了这个问题:

Case 1:

int a;
a = 1, 2, 3;
printf("%d", a);

Case 2:

 int a = 1, 2, 3;
 printf("%d", a);

解释说:

第二种情况会出错,因为逗号用作分隔符,在第一种情况下=优先于,所以基本上是(a=1), 2, 3;

但我想问为什么=不优先于,在案例2中?


这不仅仅是一个优先级问题,而且是一个语言语法问题:=在这两种情况下不是同一个运算符:

  • 在声明中int a = 1, 2, 3;, the =token 引入了一个不能是逗号表达式的初始值设定项。这,结束初始化程序并且编译器发出错误,因为2不是另一个变量的有效标识符。

  • 在声明中a = 1, 2, 3;, a = 1, 2, 3是一个表达式,解析为((a = 1), 2), 3因为=优先级高于,. =是赋值运算符,其右侧是表达式,此赋值是逗号运算符的左操作数,后面跟着一个常量表达式2, a = 1, 2本身是最终的左操作数,右操作数为的运算符3。该语句相当于((a = 1), 2), 3);,简化为a = 1;.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逗号作为分隔符和运算符 的相关文章

随机推荐