A simple non-portable expression tha
Alan J Rosenthal
flaps at utcs.uucp
Fri May 9 18:25:07 AEST 1986
In article <972 at dataioDataio.UUCP> bright at dataio.UUCP (Walter Bright) writes:
>Different code for (L+I1)+I2 and L+(I1+I2) will only be generated if
>ints are smaller than longs.
This is strictly true, but it is not true that different code for (L+I1)+I2
and L+(I1+I2) will necessarily be generated if ints are smaller than longs.
(Besides which, it is unwise to assume this; see K&R p34...)
Anyway, the official K&R quote here is from page 185 which says:
...[besides precedence rules] the order of evaluation of
expressions is undefined. ... Expressions involving a
commutative and associative operator (*, +, &, |, ^) may
be rearranged arbitrarily, even in the presence of parentheses;
to force a particular order of evaluation an explicit
temporary must be used.
So you see that the expressions (L+I1)+I2 and L+(I1+I2) are not necessarily
distinct (though not necessarily identical either).
Alan J Rosenthal
{linus|decvax}!utzoo!utcs!flaps, {ihnp4|allegra}!cbosgd!utcs!flaps
More information about the Comp.lang.c
mailing list