Isaac
Isaac

Reputation: 297

In C, does (x==y==z) behave as I'd expect?

Can I compare three variables like the following, instead of doing if((x==y)&&(y==z)&&(z=x))? [The if statement should execute if all three variables have the same value. These are booleans.]

if(debounceATnow == debounceATlast == debounceATlastlast)
{
 debounceANew = debounceATnow;
}
else
{
 debounceANew = debounceAOld;
}

Upvotes: 11

Views: 5424

Answers (3)

mesmerizingr
mesmerizingr

Reputation: 1447

You can actually type something like this:

int main()
{
        const int first = 27,
                  second = first,
                  third = second,
                  fourth = third;
        if (!((first & second & third) ^ fourth))
            return 1;
        return 0;
}

Upvotes: 1

Armen Tsirunyan
Armen Tsirunyan

Reputation: 132984

No, it does not.

x == y is converted to int, yields 0 or 1, and the result is compared to z. So x==y==z will yield true if and only if (x is equal to y and z is 1) or (x is not equal to y and z is 0)

What you want to do is

if(x == y && x == z)

Upvotes: 34

zoul
zoul

Reputation: 104065

No. The equality check associates from the left and the logical result is compared as a number, so that the expression 2 == 2 == 1 parses as (2 == 2) == 1, which in turn gives 1 == 1 and results in 1, which is probably not what you want.

Upvotes: 6

Related Questions