On Nov 17, 09 01:48, Bill Baxter wrote:
On Mon, Nov 16, 2009 at 9:30 AM, KennyTM~<[email protected]> wrote:
On Nov 17, 09 01:12, Bill Baxter wrote:
On Mon, Nov 16, 2009 at 8:24 AM, Andrei Alexandrescu
<[email protected]> 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.