Next: Ordering of Operands, Previous: Sequence Points, Up: Order of Execution [Contents][Index]
Ordering requirements are loose with the postincrement and postdecrement operations (see Postincrement and Postdecrement), which specify side effects to happen “a little later.” They must happen before the next sequence point, but that still leaves room for various meanings. In this expression,
z = x++ - foo ()
it’s unpredictable whether x
gets incremented before or after
calling the function foo
. If foo
refers to x
,
it might see the old value or it might see the incremented value.
In this perverse expression,
x = x++
x
will certainly be incremented but the incremented value may
not stick. If the incrementation of x
happens after the
assignment to x
, the incremented value will remain in place.
But if the incrementation happens first, the assignment will overwrite
that with the not-yet-incremented value, so the expression as a whole
will leave x
unchanged.