Am 20.11.2014 14:18, schrieb Love Nystrom:

Well... Actually not exactly the same.. ;)
"if (f != FALSE)" requires an explicit comparison with a second operand,
No, it does not. It requries the compiler to generate code that executes the following statement, when f is not 0. It could even use crazy contructs of cdq and sbb and other things.
And a sane compiler does not distinguish between 2 things that are semantically 100% identical, unless it's not capable of recognizing that it's identical. You can be sure that every compiler knows that if (a) and if (a != 0) are the same. The proof that these terms are identical is left as an exercise for the reader.
Most compilers are not completely retarded. For example when you write "if (x >= 23 && x <= 42) return 1; else return 0;" the compiler will usually optimize this into a single unsigned compare and a subtraction, like sub ecx, 23; cmp ecx, 9; setbe al;