Derek Parnell wrote:
On Mon, 06 Jul 2009 22:10:20 -0400, bearophile wrote:
Derek Parnell:
is valid syntax! Why is that?
To allow train-wrecks like this one:
version(Tango) import tango.stdc.stdio;
void main(char[][] args) {
if (args.length > 1)
switch (args[1]) {
int x = 1; // This initialization to 1 doesn't happen,
// it's the same as int x = void;
case "1": printf("1! x=%d\n", x); break;
case "2": printf("2! x=%d\n", x); break;
}
}
No quite the same thing, actually. You have highlighted another quirk with
switch though.
My question was really about why is it that the first token after the "(
Expression )" did not have to be a left-brace, but could be any statement
at all.
switch(x) funcA();
switch(x) switch (y) {};
Just seems wrong somehow but I'm positive that the experts have a perfectly
rational answer. I just hope I can understand it.
Switch is really a neat form of comparison and gotos but with actual
labels replaced with a case statement. A block statement is usually used
to have more than one case statement valid. This is valid code but
uncomment the next line and it becomes invalid:
module test;
import tango.io.Stdout;
void main(char[][] args)
{
if (args.length > 1)
switch (args[1])
case "1": Stdout("1"); break;
//case "2": Stdout("2"); break; //uncomment and error
}