C编程-while循环中的逗号运算符

Adn*_*nan 4 c programming-languages comma while-loop

编1:

#include<stdio.h>
 int main()
 {
     int i=0;
     while(i<=8,i++);
     printf("%d",i);
     return 0;
  }
Run Code Online (Sandbox Code Playgroud)

编2:

#include<stdio.h>
 int main()
{
  int i=0;
  while(i++,i<=8);
  printf("%d",i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Prog 1的输出为1,而Prog 2的输出为9。

有人可以解释一下这里发生了什么。两种代码有何不同?

Sto*_*ica 6

逗号运算符依次评估其两个参数,并丢弃结果(最后一个除外)。最后计算的表达式确定整个表达式的结果。

i<=8,i++-这里的表达式的值是的值i++,它是i递增之前的值。它为0,因此循环立即终止。

i++,i<=8-这里的表达式的值i<=8是仅当i增加到9 时表达式的值才为0 。

我个人认为:第二种形式虽然与for循环有些相似,但对代码的读者来说却不如实际的for循环清楚。