About switch case statements...

Ellery Newcomer ellery-newcomer at utulsa.edu
Mon Nov 16 10:27:52 PST 2009


KennyTM~ wrote:
> 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(...);
> 

you can call functions which do these...



More information about the Digitalmars-d mailing list