警告:建议用作真值的赋值周围的括号

wan*_*arn -5 c if-statement compiler-warnings

我有这个代码,有一些我不明白的东西

当我编译以下代码时:

#include <stdio.h>
#include <stdlib.h>


int main() {

double x=1;
double y=0;

  if (x!=y)
  {
    printf("x!=y\n");
  }
  if (x=y)
  {
  printf("x=y\n");
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:警告:建议用作真值的赋值括号

当我运行程序时,我得到以下输出

x!=y
x=y
Run Code Online (Sandbox Code Playgroud)

为什么打印x = y如果'='不是要比较,而只是将值放在x中的y中.

Jon*_*Jon 8

编译器警告您表达式的结果x = y在条件内使用; 我提到这一点虽然它似乎与你的实际问题没有关系,因为这些天,通常意味着有一个拼写错误,而作者的意思是写作==.

关于这个问题:由于x = y评估为y(a double)并且y为零,结果是false因为这就是C标准所说的应该发生的事情.从6.3.1.2开始:

当任何标量值转换为_Bool时,如果值比较等于0,则结果为0; 否则,结果为1.

因此,运行此代码应该不打印"等于"消息,事实上它确实对我来说.