[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Ternary operator patch
 
- From: Tony Finch <dot@...>
 
- Date: Thu, 16 Sep 2010 16:37:57 +0100
 
On Thu, 16 Sep 2010, David Given wrote:
>
> But what's the issue with & and |? & has a higher priority than |, which
> is what I'd expect (boolean multiply vs boolean add).
The problem is their precedence relative to the comparison operators.
 if (a & 15 == 0) fail();
In a better world C's precedence table would be:
           () [] -> . ++ --                     left to right
           - ! ~ ++ -- * & (type) sizeof        right to left
           * / % & << >>                        left to right
           + - ^ |                              left to right
           < <= > >= == !=                      left to right
           &&                                   left to right
           ||                                   left to right
           ?:                                   right to left
           = += -= *= /= %= <<= >>= &= ^= |=    right to left
           ,                                    left to right
Even better would be to replace prefix * with postfix ^ (like Pascal)
which would fix the tortured declaration syntax. Postfix ^ can be optional
before . just like it is before () and [], so you can abolish ->. Infix ^
would need to be spelled differently to avoid a clash; ~ would make sense
by analogy with -. It should also be possible to chain comparison
operators like BCPL and Python. Then you would get:
           () [] ^ . ++ --                      left to right
           - ! ~ ++ -- & (type) sizeof          right to left
           * / % & << >>                        left to right
           + - ~ |                              left to right
           < <= > >= == !=                      chained
           &&                                   left to right
           ||                                   left to right
           ?:                                   right to left
           = += -= *= /= %= <<= >>= &= ^= |=    right to left
           ,                                    left to right
Tony.
-- 
f.anthony.n.finch  <dot@dotat.at>  http://dotat.at/
HUMBER THAMES DOVER WIGHT PORTLAND: NORTH BACKING WEST OR NORTHWEST, 5 TO 7,
DECREASING 4 OR 5, OCCASIONALLY 6 LATER IN HUMBER AND THAMES. MODERATE OR
ROUGH. RAIN THEN FAIR. GOOD.
- References:
- Re: Ternary operator patch, Doug Rogers
 
- Re: Ternary operator patch, Ryota Hirose
 
- Re: Ternary operator patch, Ryota Hirose
 
- Re: Ternary operator patch, David Kastrup
 
- Re: Ternary operator patch, Miles Bader
 
- Re: Ternary operator patch, David Kastrup
 
- Re: Ternary operator patch, Ryota Hirose
 
- Re: Ternary operator patch, David Kastrup
 
- Re: Ternary operator patch, Ryota Hirose
 
- Re: Ternary operator patch, David Kastrup
 
- Re: Ternary operator patch, Roberto Ierusalimschy
 
- Re: Ternary operator patch, David Given