Should the 2.054 feature about warning on implicit fallthrough include

Timon Gehr timon.gehr at gmx.ch
Wed Sep 14 12:29:56 PDT 2011


On 09/14/2011 09:11 PM, bearophile wrote:
> simendsjo Wrote:
>
>> Not sure if this is a bug or as intended.
>
> The semantics of switch is a mess (example: see http://d.puremagic.com/issues/show_bug.cgi?id=3820 ).
> Mixing labels and switch cases seems a good way to create a bigger mess.

I think it is a bit mean to say the whole semantics is a mess, because 
there is an accepts-invalid bug. ;) What is really nice about D's case 
labels, is that they introduce a new scope. (as opposed to C) Unless 
they are mixed in: http://d.puremagic.com/issues/show_bug.cgi?id=6590 .

switch statements and gotos provide nice means of writing highly 
efficient code that still looks somewhat structured. I don't agree that 
using labels inside a switch creates a mess.

>
> If I invert some things in your code I get an error...
>
> import std.stdio;
> void main() {
>       int i = 1;
>       switch(i) {
>           case 0:
>               writeln("case 0");
>               goto default; // needed here
>           aLabel:
>               writeln("a label");
>           default:
>               writeln("default");
>               // But always falls through here
>       }
> }
>
> Bye,
> bearophile

Well, yes, but that is as expected. Would you expect a fall through 
error on this code?

writeln(1);
label:
writeln(2);


labeled statements and case/default statements are not the same thing.



More information about the Digitalmars-d-learn mailing list