![]() |
![]() |
![]() |
![]() |
![]() |
|
You can, in principle, embed expressions involving the increment operator,
++, or the decrement operator, --, in larger expressions,
such as the following:
++x + x /* Bad: never do this */
In such an expression, the increment operator, ++, is said not only
to produce a value, but also to have the side effect of incrementing
x.
It is important that the C language does not prescribe the order in
which operands are evaluated in arithmetic expressions. Thus, in the
expression ++x + x, the left-side operand, ++x, may be
evaluated either before or after the right-side operand, x,
depending on the implementation.
Suppose, for example, that the initial value of x is 0.
In an implementation that evaluates left-side first, the value of
++x + x will be 2; on the other hand, in an implementation
that evaluates right-side first, the value of ++x + x
will be 1.
Thus, the use of side-effect operators, such as ++ and
--, can lead to mysterious portability problems.
Worse yet, a C compiler is free to compile some expressions for left-side-first evaluation and others for right-side-first evaluation. Thus, side-effect operands can cause plenty of trouble.