Declarations in switches, errors
    Tom Karzes 
    karzes at mfci.UUCP
       
    Thu Oct  5 03:37:01 AEST 1989
    
    
  
In article <1989Oct3.184849.20106 at sq.sq.com> msb at sq.com (Mark Brader) writes:
>Actually, there *is* a way to "normally enter" the switch body.
>Instead of entering the body by a jump from the switch header, you
>put a label on the body itself and jump to that!
>...
>Only slightly less bizarre is to put one of the case labels ON the
>switch body rather than IN it -- 3.6.4.2 allows this and the compilers
>we have here support it -- whereupon you get initialization IF it is
>the first case that is chosen.
Note that although normal switch statement usage almost always involves
a compound statement with all case labels at the top level within the
compound statement, the syntax actually allows any statement.  For example,
the following:
    switch (x)
        case 5: case 9: foo();
if equivalent to:
    if ((t = x) == 5 || t == 9)
        foo();
where t is some temporary to avoid evaluating x more than once.
Similarly, one might have:
    switch (x)
        case 2: if (y)
        default:    foo();
                else
        case 7:     while (bar(z)) {
        case 12:        baz();
        case 13:        z++;
                    }
Again, I'm not advocating any of this, I'm merely pointing out that it's
within the definition of the language.
    
    
More information about the Comp.std.c
mailing list