www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - why global immutable string variable cannot be used after "case"?

reply Cheng Wei <rivercheng gmail.com> writes:
import std.stdio;
immutable HELLO = "hello";

void main() {
     auto string = "hello";
     switch(string) {
          case HELLO:
              writeln("hello");
              break;
          default:
              writeln("unknown");
              break;
     }
}

testCase.d(7): Error: case must be a string or an integral constant,
not HELLO

If immutable cannot be used, what else can be used to replace #define
in C?

Thanks a lot.
Sep 23 2011
parent reply Tobias Pankrath <tobias pankrath.net> writes:
 If immutable cannot be used, what else can be used to replace #define
 in C?
 
 Thanks a lot.

immutables are runtime constants. For case you need a compile time constant, which you can define with enum. enum string mycase = "value";
Sep 23 2011
parent "Jonathan M Davis" <jmdavisProg gmx.com> writes:
On Friday, September 23, 2011 01:38 Tobias Pankrath wrote:
 If immutable cannot be used, what else can be used to replace #define
 in C?
 
 Thanks a lot.

immutables are runtime constants. For case you need a compile time constant, which you can define with enum. enum string mycase = "value";

Or you could even reduce it to enum mycase = "value"; - Jonathan M Davis
Sep 23 2011