![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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.