man 3 switch

Kevin J. Cummings cummings at kjchome.homeip.net
Mon Nov 16 21:54:08 UTC 2009


On 11/16/2009 04:06 PM, Steven W. Orr wrote:
> On 11/16/09 13:54, quoth Rick Stevens:
>> On 11/14/2009 01:55 PM, Frank Cox wrote:
>>> On Sat, 14 Nov 2009 14:50:57 -0500
>>> Steven W. Orr wrote:
>>>
>>>> There's nothing wrong with perl having all kinds of perldoc pages.
>>>> But perl
>>>> comes from one place. C, OTOH could come from lots of places besides
>>>> FSF and
>>>> the switch statement in gcc may not be exactly the same as the switch
>>>> statement in some other dialect.
>>>
>>> As C is an ISO standard, I sincerely doubt there would be any
>>> difference in the
>>> syntax and behaviour of the keywords between C compilers on any Unix-like
>>> operating system.
>>
>> Incorrect.  C, for example, does not guarantee the order of evaluation
>> of arithmetic operators of equal precedence in the same statement (in
>> other words, is something like "a + b + c" evaluated left to right, or
>> right to left?).  This can have significant effects if some of the
>> operands have "side effects"
>>
>> Another example is that a null pointer (or the value "NUL") is not
>> necessarily zero, only that it is guaranteed to not point at any valid
>> datum.
>>
>> C allows quite a bit of leeway to the compiler implementation.
> 
> 
> I think I disagree on this one. We jumped from standardization of keywords to
> how operators perform. I quote from page 53 of K&R: Table of Precedence and
> Associativity of Operators: a + b + c *always* goes from left to right. K&R is
> not the standard, but does the standard say otherwise? Lots of things are up
> to the compiler writer, but I'd be surprised if this was one of them. Sometime
> people worry about things like
> 
> a++ + b++ + c++
> 
> but even there, the precedence and the associativity are defined. In this case
> 
> a++ + b++ + c++
> 
> becomes (in psuedo stack code):
> 
> a++
> b++
> c++
> a b +
> c +
> 
> because binary + is lower precedence than ++.
> 
> No?

No.  a++ means:  produce the value of a for use in the expression, then
increment a.
     ++a means:  increment the value of a, then use the incremented
value in the expression.

So, a++ + b++ + c++ produces the value (a+b+c), but the variables a, b,
and c get incremented *after* their values get used in the expression.

-- 
Kevin J. Cummings
kjchome at rcn.com
cummings at kjchome.homeip.net
cummings at kjc386.framingham.ma.us
Registered Linux User #1232 (http://counter.li.org)




More information about the fedora-list mailing list