当我在网上参加C测验时,我遇到了一个声明while(s++,6);
,其中 s 初始化为零。当中间有逗号运算符时,我不知道 while 循环究竟会做什么。当我在我的gcc编译器上运行它时它没有输出。但当我将而条件更改为while(1,s++)
时,它将 s 值更改为1.任何人都可以告诉我在时发生了什么>
答案 0 :(得分:6)
逗号运算符计算左侧,然后抛弃结果。 while条件保持循环除零以外的任何值。第一个是无限循环;第二个会增加s然后停止。
我怀疑在这种情况下,逗号是一个拼写错误,他们打算键入一个小于。
答案 1 :(得分:1)
来自C11标准§6.5.17:
逗号运算符的左操作数被计算为void表达式;它的评估与右操作数之间存在一个序列点。然后评估右操作数;结果有其类型和价值。
这意味着1,s++
评估1
(所以没有任何反应),然后它评估s++
并仅返回该表达式的结果。
这样的表达式等同于while (s++)
。如果逗号表达式的左侧没有任何副作用,例如您的情况,则可以将其删除。