Few things
Chris Nicholson-Sauls
ibisbasenji at gmail.com
Mon Aug 6 13:25:10 PDT 2007
Don Clugston wrote:
> Chris Nicholson-Sauls wrote:
>> 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.
>
> That's fine. The issue is that it would silently break existing code.
Okay, I'll grant you that. Maybe require the 'switch' keyword after the
continue? Or else require a label on the switch... but then continues
start acting slightly different from breaks.
No easy way out, it seems.
-- Chris Nicholson-Sauls
More information about the Digitalmars-d
mailing list