Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!news.mel.connect.com.au!munnari.OZ.AU!news.ecn.uoknor.edu!news.wildstar.net!news.ececs.uc.edu!news.kei.com!news.mathworks.com!www.nntp.primenet.com!nntp.primenet.com!news1.best.com!nntp1.best.com!usenet
From: dillon@flea.best.net (Matt Dillon)
Newsgroups: comp.unix.bsd.freebsd.misc
Subject: Re: gcc standards question (was blank)
Date: 7 Nov 1996 23:43:56 GMT
Organization: BEST Internet Communications, Inc.
Lines: 37
Message-ID: <55ts7s$dd6@nntp1.best.com>
References: <55tme9$n27@james.freenet.hamilton.on.ca>
NNTP-Posting-Host: flea.best.net
:In article <55tme9$n27@james.freenet.hamilton.on.ca>,
:Tim Vanderhoek <ac199@james.freenet.hamilton.on.ca> wrote:
:> wrote:
:>>
:>> This program doesn't work as I think it should. On line 10, b is not
:>> incremented between the first and second b++'s, though it is correct
:>> after the entire expression.
:>
:>I won't swear to it, but I believe the results to that particular line are
:>"undefined" in most standards (and with good reason -- ie. what should a
:>line like a=b++*2||a[b]; produce? It could conceviably be optimized
:>either waw).
:>
:>
:>> a=c[b++]|((c[b++])<<8);
:>
:>
:>--
:>tIM...HOEk
:>"Perception is often reality - or at least it is perceived as to be so"
:> - Scott Nudds [in usenet or email]
Yes, this is definitely an undefined operation, just as something like:
fubar(b, b++)
is an undefined operation. There is NOTHING that says that the
post-incrementation of b must occur after all the procedure arguments
have been evaluated. Same goes for:
a = b++ + b;
The ONLY ordering you can count on in C is the statement-to-statement
ordering, && and || ordering, and comma operator ordering.
-Matt