我有这段代码,但有些东西我不明白
当我编译以下代码时:
#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;
}
我收到以下警告:警告:建议在赋值周围使用括号作为真值
当我运行程序时,我得到以下输出
x!=y
x=y
如果 if '=' 不是为了比较而是只是将 y 中的值放入 x 中,为什么要打印 x=y。
最佳答案
编译器警告您表达式x = y
的结果在条件内部使用;我提到这一点,尽管它似乎与您的实际问题无关,因为这些天,通常这意味着存在拼写错误,作者打算写 ==
.
关于这个问题:因为x = y
计算结果为y
(一个double
)并且y
为零,结果为 false
因为这是 C 标准规定应该发生的情况。从 6.3.1.2 开始:
When any scalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.
因此,运行此代码应该不会打印“等于”消息,正如 it does for me 所示。 .
关于c - 警告 : suggest parentheses around assignment used as truth value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160315/