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