while循环中的逗号运算符

时间:2015-10-25 01:57:03

标签: c loops

当我在网上参加C测验时,我遇到了一个声明while(s++,6);,其中 s 初始化为零。当中间有逗号运算符时,我不知道 while 循环究竟会做什么。当我在我的gcc编译器上运行它时它没有输出。但当我将条件更改为while(1,s++)时,它将 s 值更改为1.任何人都可以告诉我时发生了什么>

2 个答案:

答案 0 :(得分:6)

逗号运算符计算左侧,然后抛弃结果。 while条件保持循环除零以外的任何值。第一个是无限循环;第二个会增加s然后停止。

我怀疑在这种情况下,逗号是一个拼写错误,他们打算键入一个小于。

答案 1 :(得分:1)

来自C11标准§6.5.17:

  

逗号运算符的左操作数被计算为void表达式;它的评估与右操作数之间存在一个序列点。然后评估右操作数;结果有其类型和价值。

这意味着1,s++评估1(所以没有任何反应),然后它评估s++并仅返回该表达式的结果。

这样的表达式等同于while (s++)。如果逗号表达式的左侧没有任何副作用,例如您的情况,则可以将其删除。