Why put the constant before the variable in a comparison?
I noticed for a while now the following syntax in some of our code:
if( NULL == var){
//...
}
or
if( 0 == var){
//...
}
and similar things.
Can someone please explain why did the person who wrote this choose this notation instead of the common var == 0
way)?
Is it a matter of style, or does it somehow affect performance?
It's a mechanism to avoid mistakes like this:
if ( var = NULL ) {
// ...
}
If you write it with the variable name on the right hand side the compiler will be able catch certain mistakes:
if ( NULL = var ) { // not legal, won't compile
// ...
}
Of course this won't work if variable names appear on both sides of the equal sign and some people find this style unappealing.
Edit:
As Evan mentioned in the comments, any decent compiler will warn you about this if you enable warnings, for example, gcc -Wall
will give you the following:
warning: suggest parentheses around assignment used as truth value
You should always enable warnings on your compiler, it is the cheapest way to find errors.
Lastly, as Mike B points out, this is a matter of style and doesn't affect the performance of the program.
If you mistakenly put
if ( var = NULL )
instead of
if ( var == NULL )
then there will only be a compiler warning. If you reverse the order:
if ( NULL == var )
then there will be a compiler error if you put
if ( NULL = var )
Personally, I hate to read code written that way, and I only made that mistake once in my first year of coding. =)
To avoid the
if (var = NULL)
bug
Corollary: try to use const
as much as you can.
const int val = 42;
if (val = 43) {
...
}
will not compile.
Quoting Joel On Software, The Guerrilla Guide to Interviewing:
Occasionally, you will see a C programmer write something like if (0==strlen(x)), putting the constant on the left hand side of the == . This is a really good sign. It means that they were stung once too many times by confusing = and == and have forced themselves to learn a new habit to avoid that trap.
(I'm not really a fan of this "best practice".)