Next: Data Accessing, Up: Expression Evaluation
Expressions are evaluated left to right and always in order. There are thus differences from C expression evaluation order.
Assuming a `=' attribution operator with C semantics and two variables, `x' and `y', the `x = y = 0' expression will not pass, for the evaluation order is left to right and thus the second `=' operator attempts to set its left operand (`x = y') to the value of its right operand (`0'). The `x = (y = 0)' expression will do fine, though.
Differences from C expression evaluation are also due to always in order rule. Thus a subexpression occuring before a second subexpression is always evaluated before the same second subexpression. Function arguments are not evaluated before the expression.
`(x = 0) + cos(x)' expression evaluates to 1, no matter the value of assumed numeric variable `x' before expression evaluation and assuming a cosine function called `cos'. A C compiler (like the one I am using now) still evaluates the expression to 1, yet it claims that `operation on `x' may be undefined'.
Assuming a `real modf(real, real &)' function with C modf
semantics
and two real variables, `e' and `f', valued 2.5 and 4, respectively,
the expression `f + 0 * modf(e, f)' evaluates to 4 (`f' will be set
to 2). The C expression f + 0 * modf(e, &f)
, where both e
and
f
are double
s, evaluates to 2 (and sets f
to 2) (at least
the compiler I am using does so).