在C中,(x == y == z)的行为与我期望的一样吗?

Isa*_*aac 11 c equality

我可以比较三个变量,如下所示,而不是做if((x==y)&&(y==z)&&(z=x))?[如果所有三个变量具有相同的值,则应执行if语句.这些是布尔.]

if(debounceATnow == debounceATlast == debounceATlastlast)
{
 debounceANew = debounceATnow;
}
else
{
 debounceANew = debounceAOld;
}
Run Code Online (Sandbox Code Playgroud)

Arm*_*yan 33

不,不是的.

x == y转换为int,yield 01,并将结果与​​之进行比较z.因此,x==y==z当且仅当如果,将产生真实 (x is equal to y and z is 1) or (x is not equal to y and z is 0)

你想做的是

if(x == y && x == z)
Run Code Online (Sandbox Code Playgroud)

  • 我几乎认为gcc应该为此产生警告,但是如果你写'x == y == z`那么它似乎表明你根本不知道C或者你是代码高尔夫之神. .. (7认同)
  • 当使用`-Wall`编译时,gcc会对这样的构造产生警告:`warning:在'=='的操作数中建议围绕比较的括号 (5认同)

zou*_*oul 6

否.等式检查从左侧关联,逻辑结果将作为一个数字进行比较,以便表达式2 == 2 == 1解析为(2 == 2) == 1,而这又会给出1 == 1并产生结果1,这可能不是您想要的.