奇怪的是while()条件

Vin*_*der -1 c

任何人都可以帮助我理解下面while()循环中写入条件的方式:

请找到以下代码:

int fun () {
    static int x = 5;
    x--;
    pritnf("x = %d\n", x);
    return x;
}

int main () {
  do {
    printf("Inside while\n");
  } while (1==1, fun());

  printf("Main ended\n");
  return 0;
}

Output:

Inside while
x = 4
Inside while
x = 3
Inside while
x = 2
Inside while
x = 1
Inside while
x = 0
Main ended
Run Code Online (Sandbox Code Playgroud)

此外,我有以下代码和输出惊喜:

int fun () {
    static int x = 5;
    x--;
    printf("x = %d\n", x);
    return x;
}

int main () {
  do {
    printf("Inside while\n");
  } while (fun(),1==1);

  printf("Main ended\n");
  return 0;
}

Output:


Inside while
x = 4
Inside while
x = 3
Inside while
x = 2
Inside while
x = 1
Inside while
x = 0
Inside while
x = -1
Inside while
x = -2
Inside while
x = -3

.
.
.
.

    Inside while
x = -2890
Inside while
x = -2891
Inside while
x = -2892
Inside while
x = -2893
Inside wh
Timeout
Run Code Online (Sandbox Code Playgroud)

根据我的理解,从右到左检查条件.如果1 == 1出现,则条件始终为真且永不中断.

Bli*_*ndy 6

, 是一个运算符,它接受两个参数并返回第二个参数.

在第一种情况下1==1, fun()相当于fun(),所以循环发生时fun()返回非零数字.

在第二种情况下,fun(), 1==1永远发生(因此超时).