Few things

Lionello Lunesu lio at lunesu.remove.com
Wed Aug 8 07:27:42 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?

Yes, I've done that too, but honestly I'd be the first one to admit that 
it isn't very clear. In fact, I'd go so far as to call it a reason to 
attach a meaning to "continue" in a switch/case.

As mentioned, it would break existing code :(

L.



More information about the Digitalmars-d mailing list