switch

 

Sollen in Abhängigkeit vom Wert eines Ausdrucks verschiedene Befehle ausgeführt werden, so ist eine switch Anweisung sehr elegant:

 

switch( Ausdruck )

{

    case konstante_1:

        Anweisung_1;

    break;

 

    case konstante_2:

        Anweisung_2;

    break;

    .

    .

    case konstante_n:

        Anweisung_n;

    break;

    default:   // default ist optional

        Anweisung_0;

};

 

Der Wert von Ausdruck wird berechnet. Danach springt die Programmausführung zur Konstante die dem Wert des Ausdrucks entspricht, und führt das Programm dort fort. Entspricht keine Konstante dem Ausdruckswert, so wird das switch Konstrukt verlassen.

 

Ist in einer switch Anweisung ein default definiert, so werden die Anweisungen hinter default ausgeführt, wenn keine Konstante gefunden wurde, die dem Wert des Ausdrucks entspricht.

 

Beispiel:

 

switch(a+2)

{

    case 1:

        b=b*2;

    break;

 

    case 5*5:

        b=b+2;

    break;

 

    case 100&0xf:

        b=b/c;

    break;

 

    default:

        b=b+2;

}

 

Die Abarbeitung der switch Anweisung ist im Interpreter optimiert, da alle Werte in einer Sprungtabelle abgelegt werden. Daraus resultiert die Einschränkung das der berechnete Ausdruck immer als vorzeichenbehafteter 16 Bit Integer (-32768 .. 32667) ausgewertet wird. Ein "case > 32767" ist daher nicht sinnvoll.

 

break Anweisung

 

Ein break verläßt die switch Anweisung. Läßt man vor case das break weg, so werden die Anweisungen auch ausgeführt, wenn zum vorherigen case gesprungen wird:

 

switch(a)

{

    case 1:

        a++;

 

    case 2:

        a++;  // wird auch bei einem Wert von a==1 ausgeführt

 

    case 3:

        a++; // wird auch bei einem Wert von a==1 oder a==2 ausgeführt

}

 

In diesem Beispiel werden alle drei "a++" Anweisungen ausgeführt, wenn a gleich 1 ist.