c - 在 while 循环条件中赋值

标签 c initialization while-loop

found维基百科上的这段代码。

#include <stdio.h>

int main(void)
{
  int c;

  while (c = getchar(), c != EOF && c != 'x')
  {
    switch (c)
      {
      case '\n':
      case '\r':
        printf ("Newline\n");
        break;
      default:
        printf ("%c",c);
      }
  }
  return 0;
}

我很好奇用作 while 循环条件的表达式:

while (c = getchar(), c != EOF && c != 'x')

它的作用很明显,但我以前从未见过这种结构。这是否特定于 while 循环?如果不是,解析器/编译器如何确定逗号分隔表达式的哪一侧为 while 循环返回 bool 值?

最佳答案

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

它也是一个"sequence point" ,这意味着在执行下一部分代码之前将计算所有副作用。

关于c - 在 while 循环条件中赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1136108/

相关文章:

android - BluetoothAdapter.getDefaultAdapter();返回空

c++ - 在构造函数的初始化列表中将 c-style-string 转换为 std::string

java - 如何在while循环中实现for循环?

java - 检查 Java 中的字母是否等于指定字母

c# - 对象异常的无限循环stackoverflow列表

c - 在没有 Malloc 的情况下分配结构数组?

c - 为线程分配堆栈内存

在 C 中复制数组并清除 char 数组中的垃圾

c - 受制于结构、获取和放置

c++ - 匿名命名空间中的静态结构