Next: Write Assignments in Separate Statements, Previous: Postincrement and Postdecrement, Up: Assignment Expressions [Contents][Index]
In C, the order of computing parts of an expression is not fixed.
Aside from a few special cases, the operations can be computed in any
order. If one part of the expression has an assignment to x
and another part of the expression uses x
, the result is
unpredictable because that use might be computed before or after the
assignment.
Here’s an example of ambiguous code:
x = 20; printf ("%d %d\n", x, x = 4);
If the second argument, x
, is computed before the third argument,
x = 4
, the second argument’s value will be 20. If they are
computed in the other order, the second argument’s value will be 4.
Here’s one way to make that code unambiguous:
y = 20; printf ("%d %d\n", y, x = 4);
Here’s another way, with the other meaning:
x = 4; printf ("%d %d\n", x, x);
This issue applies to all kinds of assignments, and to the increment and decrement operators, which are equivalent to assignments. See Order of Execution, for more information about this.
However, it can be useful to write assignments inside an
if
-condition or while
-test along with logical operators.
See Logical Operators and Assignments.