Next: , Up: Order of Execution   [Contents][Index]

10.1 Reordering of Operands

The C language does not necessarily carry out operations within an expression in the order they appear in the code. For instance, in this expression,

foo () + bar ()

foo might be called first or bar might be called first. If foo updates a datum and bar uses that datum, the results can be unpredictable.

The unpredictable order of computation of subexpressions also makes a difference when one of them contains an assignment. We already saw this example of bad code,

x = 20;
printf ("%d %d\n", x, x = 4);

in which the second argument, x, has a different value depending on whether it is computed before or after the assignment in the third argument.