Does your compiler get this program right?

Maarten Litmaath maart at cs.vu.nl
Fri Nov 25 04:57:25 AEST 1988


In article <4082 at cs.utexas.edu> meyering at cs.utexas.edu (Jim Meyering) writes:
\In article <2298 at cbnews.ATT.COM> lvc at cbnews.ATT.COM (Lawrence V. Cipriani) writes:
\	>A friend of mine found a bug in his C compiler.  He found
\
\It's not a bug.

It IS a bug!

\	[...deleted commentary, code]
\	>*f++ += *g++;		/* miscompiled line */
\
\The standard does not specify the order of evaluation for such
\statements.

There is NO problem concerning evaluation order! Remember: `a += b' means
`a = a + b, BUT evaluate a only ONCE!'

\...
\	*f += *g++;      or      *f = *f + *g++;
\	f++;                     f++;
\
\I found that the size of the object code was actually reduced.
\Chalk one up for readability *and* efficiency.

Readability? Hahaha! No, really :-(
`*f++ += *g++' is perfectly readable and valid C. It's constructs like this
one that make C as powerful as it is. Are you a Pascal or Modula freak?
Consider `LongVariableName = LongVariableName + 3': do you find this gem
more readable? More typable?
If there are side effects, you cannot even use the `Pascal construct'.
-- 
fcntl(fd, F_SETFL, FNDELAY):          |Maarten Litmaath @ VU Amsterdam:
      let's go weepin' in the corner! |maart at cs.vu.nl, mcvax!botter!maart



More information about the Comp.lang.c mailing list