RE: C and side-effects

From: Khimenko Victor (khim@sch57.msk.ru)
Date: Thu May 04 2000 - 07:24:43 EST


In <NDBBIDGCNMEFOAKNNLLHGEKACFAA.rml@tech9.net> Robert M. Love (rml@tech9.net) 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,

He is WRONG.

> because the C standard does *not* specify this.

It DOES. For &&, || (it's called "short evalution). It's done to allow code
like this: if (x<>0 && y/x < 5) ... This expression to the left of && MUST
be CHECKED before expression to the right of && ...

> proof is in K&R, where they explicitly mention compiler design or
> optimization can change compound statement ordering in the resulting
> machine code.

NOT FOR && and || !!!

> thus, i agree an alternative should be considered in the kernel.

-
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:14 EST