Re: C and side-effects

From: Robert J. Macomber (robertm@rojoma.com)
Date: Wed May 03 2000 - 21:46:36 EST


On Wed, May 03, 2000 at 07:45:01PM -0400, Robert M. Love wrote:
> > Rik van Riel wrote:
> >
> > > I'm not that good at C, mas aren't expressions with side-effects
> > > ill-defined? How can we be sure (short of tracking the gcc
> > > mailing lists) that i will be incremented after the left part of
> > > the test?
> >
> > Because it is defined in the C standard?
> >
> > Rik
>
> maybe im reading the thread wrong, but Cesar is saying the code
> while ((mm->swap_cnt << 2 * (i + 1) < max_cnt) && i++ < 10)
> does not guarentee that the expression to the left of && occurs prior to
> "i++" -- and he is Right,
> because the C standard does *not* specify this. proof is in K&R, where they
> explicitly mention compiler design or optimization can change compound
> statement ordering in the resulting machine code. thus, i agree an
> alternative should be considered in the kernel.

No. && is a sequence point - its left hand side is completely
evaluated before its right hand side (and, additionally, if the LHS is
false the RHS isn't evaluated at all). That's in sections
3.3.13-3.3.15 of the ANSI standard, according to the comp.lang.c FAQ.

-- 
			Robert Macomber
			 robertm@rojoma.com

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun May 07 2000 - 21:00:13 EST