Walter Bright wrote:
Don wrote:
That's not fall-through, one case is *inside* the 'if' clause of another one!! Wow. Do you really want to encourage that sort of thing?

I think it's more the #if that obfuscates the code. After long experience with #if, I really don't like it, which is why I adamantly resist having fine-grained conditional compilation in D.

I'm used to that. If you take out the #if, it's still wierd. That one really ought to be a goto. It's the presence of the 'else' in particular:

case A:
     if (xxx)
     {
case B:
        yyy;
     }
     else
     {
        zzz;
     }
     break;

I had to read it several times before I could make sense of it. Although the zzz; looks like it's part of the B case, it's only part of the A case.

An oddity is that this compiles:

  switch(x) {
case 1:
     if (x<10)
Lcase2:
        writefln("yyy");
     else
        writefln("zzz");
     break;
     }

and so does this:

  switch(x) {
case 1:
     if (x<10)
case 2:
        writefln("yyy");
  }

but this doesn't:

  switch(x) {
case 1:
     if (x<10)
case 2:
        writefln("yyy");
     else
        writefln("zzz");
     break;
  }

Reply via email to