On 06/14/2012 05:59 PM, Paul wrote:
The book in section 3.5 gives these valid case examples:
case ’0’: .. case ’9’:
case ’A’: .. case ’Z’: case ’a’: .. case ’z’:
case ’.’, ’,’, ’:’, ’;’, ’!’, ’?’:
In my code:
case "STEP01": ...compiles and works correct
case "STEP01", "STEP02": ...compiles and works correct
case "STEP01": .. case "STEP50": ...compiler reports:
iccstats.d(27): Error: Integer constant expression expected instead of
"STEP01"
iccstats.d(27): Error: Integer constant expression expected instead of
"STEP50"
iccstats.d(27): Error: integral constant must be scalar type, not
const(char[])
Help please.
case-range expressions don't work with strings. (because there is no
general way to meaningfully fill in the gap.)
You could automatically generate the case statements via a string mixin
(untested):
mixin({
string r;
foreach(i;1..51) r~=`case "STEP`~(i<10?"0":"")~to!string(i)~`":`;
return r;
}());
But that is probably overkill, why not just parse the string with an if
statement?
If you need fallthrough, you can use a goto statement
if(...) goto Lstepn;
switch(...){
case ...:
...
break;
Lstepn:
case ...:
...
break;
}