Sequence point

Adding more sequence points is sometimes necessary to make an expression defined and to ensure a single valid order of evaluation.

There are three possibilities:[1][2][3] The execution of unsequenced evaluations can overlap, leading to potentially catastrophic undefined behavior if they share state.

The final value of i is ambiguous, because, depending on the order of expression evaluation, the increment may occur before, after, or interleaved with the assignment.

[4] Other languages, such as C#, define the precedence of the assignment and increment operator in such a way that the result of the expression i=i++ is guaranteed.

Partially because of the introduction of language support for threads, C11 and C++11 introduced new terminology for evaluation order.