mrks mrks - 5 months ago 22
C Question

Order of execution for an if with multiple conditionals

In an if statement with multiple conditionals, is the second conditional executed if the outcome of the first is clear?


if(i>0 && array[i]==0){

If I swap the conditionals a segfault may occur for negative values of i, but this way no segfault occurs. Can I be sure that this always works or do have have to use nested if statements?

Uri Uri

This type of evaluation is called short-circuiting. Once the result is 100% clear, it does not continue evaluating.

This is actually a common programming technique. For example, in C++ you will often see something like:

if (pX!=null && pX->predicate()) { bla bla bla }

If you changed the order of the conditions, you could be invoking a method on a null pointer and crashing. A similar example in C would use the field of a struct when you have a pointer to that struct.

You could do something similar with or:

if(px==null || pX->isEmpty()} { bla bla bla }

This is also one of the reasons that it is generally a good idea to avoid side effects in an if condition.

For example suppose you have:

if(x==4 && (++y>7) && z==9)

If x is 4, then y will be incremented regardless of the value of z or y, but if it is not 4, it will not be incremented at all.