int i=2;
i = ++i + ++i + ++i;
Which is more correct? Java's result of 12 or C = 13. Or if not a matter of correctness, please elaborate.
int i=2;
i = ++i + ++i + ++i;
Which is more correct? Java's result of 12 or C = 13. Or if not a matter of correctness, please elaborate.
In C this is undefined behavior. There is no correct behavior.
Java guarantees (§15.7.1) that it will be evaluated left-to-right, giving 12. Specifically,
++
has higher precedence that+
. So it first binds those, then it associates the addition operations left to right§15.7.1 says the left operand is evaluated first, and §15.7.2 says both operands are evaluated before the operation. So it evaluates like:
In C, it is undefined behavior to modify a variable twice without a sequence point in between.
The Java result makes sense to me because the operators give the result you would expect, but no serious program should contain a statement like this.
EDIT: I'm amused that this one sentence response has been my highest scored answer of the evening (compared to the dozen other answers I posted, some with pages of code samples). Such is life.
There is nothing like more correct. It is actually undefined and its called Sequence Point Error. http://en.wikipedia.org/wiki/Sequence_point