The D Programming Language: switches
    Ray Dunn 
    ray at micomvax.UUCP
       
    Wed Mar 16 07:10:15 AEST 1988
    
    
  
[References to various postings giving various proposed incarnations of
switch syntax ommitted]
My 2-penny-worth is that the switch statement is anyway too restrictive with
its integer constant expression values, and that making a special case [pun
not intended] of this was Not Really Worthwhile.
Case statements should just be generalised into a "shorthand" way of
stating if...elseif...elseif...else...
So, (simplified to give jist rather than be definitive):
switch
{ [declaration]
  case (expression):
    .
    [statement]
    .
  case (expression):
    .
    [statement]
    .
  default:
    .
    [statement]
    .
}
Where the expression in each "case (expression)" is a full boolean
expression as in "if (expression)".
There could of course be a (bad) argument to say that if "switch {" appears
as "switch (expression) {" then the previous constant expression meaning of
the switch is used - pretend I didn't suggest that.
Automatic fallthrough should *not* take place, and the common fallthrough
requirement of:
case 1:
case 2:
case 3:
becomes a simple 'or'ed boolean expression.
Compilers can easily generate just as "efficient" code when only constant
expression values are involved (MSC 4.0 seems to generate worse code when you
use a case statement than when you use an if...else if...else... sequence!).
[God! I've just realized that this is aprroximately the way case statements
are defined in that *wonderful* (:-) language dBaseIII - so, I know, I've
just lost any credibility I may have had!!]
Ray Dunn.  ..{philabs, mnetor, musocs}!micomvax!ray
    
    
More information about the Comp.lang.c
mailing list