About switch case statements...

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Nov 16 11:57:18 PST 2009


Ellery Newcomer wrote:
> 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...

... which is where the "none"/"bottom" type comes into play!

Andrei



More information about the Digitalmars-d mailing list