Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Stupid compiler question...

Author: Dann Corbit

Date: 13:36:56 12/17/01

Go up one level in this thread


On December 15, 2001 at 08:48:41, Gareth McCaughan wrote:

>On December 15, 2001 at 01:26:16, Dieter Buerssner wrote:
>
>[to Dann]
>> I had written my answer offline, before I had seen, that you gave essentially
>> the same answer already.
>
>Actually your answers aren't "essentially the same"
>unless I've misunderstood at least one of them.
>
>Dann was saying: "The compiler ought to do things in
>a consistent order here, and the vendor is breaking the
>rules if it doesn't". You were saying "The order in
>which things happen here is undefined".
>
>You were right and Dann (to my surprise, since he's
>normally very reliable on these matters!) was wrong.
>a^b^c has to be parsed as (a^b)^c ... errm, or maybe
>I mean a^(b^c); it doesn't matter here ... but that
>has nothing to do with the order in which the
>subexpressions actually get evaluated. There are
>no sequence points in the expression, so the compiler
>has the freedom to do as it pleases with evaluation
>order provided it gives the right answer.
>
>Since ^ is associative (note to any non-C-programmers
>reading this: that's xor, not exponent!) it doesn't
>make any difference whether it groups left or right
>(which is why I can't remember which way, if either,
>is specified); but in any case that doesn't make any
>difference to what order the compiler's allowed to
>do the evaluations in.
>
>So Paul's compiler is perfectly within its rights to
>do things differently in debug and release mode.
>
>It's possible that Dann's been misled by the references
>in the C FAQ to "just before a function call". That
>doesn't mean that if you say a()+b() it has to evaluate
>a() before b(). It just means that when you do a function
>call, all the argument expressions (and the expression
>that determines what function to call, too!) have to
>be completely evaluated -- side-effects and all -- before
>the function is actually called. It's very unclearly
>expressed in the standard, unfortunately.

You are absolutely right.  I was posting late at night, and I was thinking that
the function calls served as sequence points (which they do, since a function
call is a sequence point) but -- of course -- they don't alter the order of
operations!  If comma operators or semi-colons as end of statements were used,
we could force an order of operations.




This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.