The term order of evaluation refers to the order in which operands are evaluated - as distinct from the order in which operators are processed.
When an expression is evaluated, the order in which operators are processed is fully determined. For example, in the statement, "x = a + b + c * d;", the multiplication will be performed first because of the rules of precedence, and then the leftmost addition will be evaluated because of the rules of associativity. So the statement is equivalent to "x = (a + b) + (c * d);".
What is not specified in the C language is the order in which operands are evaluated. In the expression "x = (a() + b()) + (c() * d());", the order in which the four functions are called is completely unspecified. This may not matter but it could do if the side effects incurred by the evaluation of each function are mutually dependent.
Order of evaluation becomes significant in a statement such as "a[i] = i++". This statement involves two side effects, the incrementing of the variable "i" and an assignment to an element of the array "a". but the order in which these two events occur is not specified. If "i" starts with the value 3, it might be expected that it would end up with the value 4 and that either the 3rd or 4th element of the array would be assigned the value 3. In fact even this ambiguous result is not guaranteed. the results of such a statement are classified as undefined.
Order of evaluation is only significant when multiple side effects occur within a statement. A simple assignment statement may have only a single side effect resulting from the assignment operation but if the expression contains function calls, increment or decrement operators or references to volatile objects there is immediately a situation where multiple side effects occur and the order in which those side effects occur, may or may not be significant.
Alone among operators, ||, &&, the conditional operator ?: and the comma operator are special in that they specify an order of evaluation. In each case the left hand (first) operand is evaluated first and a sequence point follows.
See also:
Side effects