Few things

Chris Nicholson-Sauls ibisbasenji at gmail.com
Sun Aug 5 11:27:14 PDT 2007


Don Clugston wrote:
> Lionello Lunesu wrote:
>>> 7) From the FAQ: 
>>
>>> Many people have asked for a requirement that there be a break
>>  > between cases in a switch statement, that C's behavior of
>>  > silently falling through is the cause of many bugs.
>>  > The reason D doesn't change this is for the same reason that
>>  > integral promotion rules and operator precedence rules were
>>  > kept the same - to make code that looks the same as in C
>>  > operate the same. If it had subtly different semantics, it
>>  > will cause frustratingly subtle bugs.
>>
>>> I agree with both points of view. My idea: calling this
>>  > statement differently (like caseof) instead of "switch"
>>  > (like in Pascal), so you can change its semantics too,
>>  > removing the falling through (you may use the Pascal
>>  > semantic too).
>>
>> Sorry to hijack your point here, but this got me thinking:
>>
>> Why not use "continue" for seeping through to the next case statement? 
>> DMD could then complain if a case does not end with 
>> break/continue/goto/return and silently insert a assert(0) before each 
>> case (the way it does for functions that return a value.)
> 
> Doesn't
> 
> for (c;;) {
>   switch (c) {
>   case 'a': continue;
>   case 'b': break;
>   }
> }
> 
> already have a meaning?

I can't think of any other case where this problem would show (aside 
from other looping statements, so the fix is the same).  Since this is 
probably not an overly common case (I've done it myself, but not very 
often), I don't think writing a label on the loop would be a big deal. 
I could live with fall-thru-by-continue.  Maybe if looping statements 
had a shorthand form for labeling, it could be even cleaner...

for loop (c;;) {
   switch (c) {
     case 'a': continue loop;
     case 'b': break loop;
   }
}

-- Chris Nicholson-Sauls



More information about the Digitalmars-d mailing list