【问题标题】:Weird while() conditions奇怪的 while() 条件
【发布时间】:2015-11-25 05:50:13
【问题描述】:

谁能帮我理解下面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

我还有以下代码和令人惊讶的输出:

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

据我了解,条件是从右到左检查的。如果 1==1 正确,则条件始终为真,并且永远不会中断。

【问题讨论】:

标签: c


【解决方案1】:

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

在第一种情况下,1==1, fun() 等价于 fun(),因此循环发生在 fun() 返回非零数字时。

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

【讨论】:

  • 我不喜欢运算符,它的用途主要是把语句变成表达式。 GCC 处理得更好,并且在所有其他类 C++ 语言(C#、Java 等)中完全没有它
【解决方案2】:

comma operator 是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回此值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多