About switch case statements...

KennyTM~ kennytm at gmail.com
Mon Nov 16 10:06:47 PST 2009


On Nov 17, 09 01:48, Bill Baxter wrote:
> On Mon, Nov 16, 2009 at 9:30 AM, KennyTM~<kennytm at gmail.com>  wrote:
>> On Nov 17, 09 01:12, Bill Baxter wrote:
>>>
>>> On Mon, Nov 16, 2009 at 8:24 AM, Andrei Alexandrescu
>>> <SeeWebsiteForEmail at erdani.org>    wrote:
>>>>
>>>> Walter Bright wrote:
>>>>>
>>>>> Andrei Alexandrescu wrote:
>>>>>>
>>>>>> I was hoping the lesson learned would be to fix switch as was
>>>>>> suggested.
>>>>>
>>>>> I checked, because it wasn't written in the way I usually write things,
>>>>> and sure enough it wasn't code I wrote :-)
>>>>>
>>>>>   From the changelog for D 0.129: "Incorporated Ben Hinkle's new
>>>>> std.format
>>>>> which can print general arrays."
>>>>>
>>>>> http://www.digitalmars.com/d/1.0/changelog1.html#new0129
>>>>
>>>> So people are liable to make the mistake.
>>>>
>>>> Andrei
>>>>
>>>
>>> What about when you want to fall through to a multiple label?  Or a range
>>> label?
>>>
>>> case 0:
>>>      // do stuff
>>>      goto case ??;
>>> case 1: .. case 9:
>>>       // do more stuff
>>>       goto case ??;
>>> case 10,20,30:
>>>       // still more stuff
>>>
>>> The obvious answer would seem to be just "pick any one".
>>> I just bring it up because I haven't seen that ... uh case ...
>>> mentioned by anyone.
>>>
>>> --bb
>>
>> Since
>>
>> case a:
>> ..
>> case b:
>>
>> expands to
>>
>> case a:
>> case a+1:
>> case a+2:
>> // ....
>> case b:
>>
>> and
>>
>> case a,b,c,d:
>>
>> expands to
>>
>> case a:
>> case b:
>> case c:
>> case d:
>>
>> Your speculation is correct. Please note that the "goto case X;" statement
>> works *now*, so there's no need to guess its behavior.
>
> Seriously?  Didn't realize.
>
> So valid end-of-case statements would be:
>     break;
>     return;
>     continue;
>     goto *;
>     goto case *;

throw ...;
assert(...);

> And if you don't have one of those then it's an error?
>
> Could this get into difficult-to-verify territory?  And therefore be
> difficult to implement?
> It looks like the exact same problem as enforcing that all code paths
> return a value, which is something I think D doesn't currently enforce
> because it's too hard.   So you run into Walter's dislike for
> errors/warnings that are incorrect because the compiler is too stupid.
>
>
> --bb

But DMD already has the "no return at end of function" warning.



More information about the Digitalmars-d mailing list