C中赋值运算符的值的行为不一致

时间:2014-10-25 10:03:03

标签: c gcc

在gcc中,我看到了

int a=(b=0);

也指定0。我还了解到,赋值是一个表达式,其值和赋值从右到左关联。

现在可以预期,当用作条件的一部分时,a = 0将被评估为false。但事实并非如此。 if(a=0)始终评估为true。有人可以解释这背后的原因还是我错过了一些明显的东西?

1 个答案:

答案 0 :(得分:3)

  

现在可以预期,当用作条件的一部分时,a = 0将被评估为false。

确实如此。

#include <stdio.h>
int main()
{
  int a = 456;
  if (a=0)
    puts("(a=0) evaluates to true");
  else
    puts("(a=0) evaluates to false");
  return 0;
}
$ ./a.out
(a=0) evaluates to false

无论你用什么来测试你的假设都一定是不正确的。