Share via


switch-Anweisung (C)

Die Anweisungen switch und case helfen beim Steuern von komplexen bedingten Vorgängen und Branchvorgängen. Mit der switch-Anweisung wird die Steuerung an eine Anweisung innerhalb des Texts übergeben.

Syntax

selection-statement:
switch ( expression ) statement

labeled-statement:
case constant-expression : statement
default : statement

Hinweise

Eine switch -Anweisung bewirkt, dass die Steuerung abhängig vom Wert auf eine expressionlabeled-statement im Anweisungstext übertragen wird.

Die Werte von expression und jedem constant-expression müssen einen integralen Typ aufweisen. Ein constant-expression muss zur Kompilierzeit einen eindeutigen und konstanten Integralwert aufweisen.

Die Steuerung wird an die case -Anweisung übertragen, deren constant-expression -Wert mit dem Wert von expression übereinstimmt. Die switch -Anweisung kann eine beliebige Anzahl von case -Instanzen enthalten. Es können jedoch keine zwei constant-expression -Werte innerhalb derselben switch -Anweisung denselben Wert aufweisen. Die Ausführung des switch -Anweisungstexts beginnt bei der ersten Anweisung in oder nach der passenden labeled-statement . Die Ausführung verläuft bis zum Ende des Texts oder bis eine break -Anweisung die Steuerung aus dem Text überträgt.

Die Verwendung der switch-Anweisung sieht in etwa folgendermaßen aus:

switch ( expression )
{
    // declarations
    // . . .
    case constant_expression:
        // statements executed if the expression equals the
        // value of this constant_expression
        break;
    default:
        // statements executed if expression does not equal
        // any case constant_expression
}

Sie können mit der break -Anweisung die Verarbeitung einer bestimmten Anweisung mit Bezeichnung innerhalb der switch -Anweisung beenden. Sie verzweigt sich bis zum Ende der switch -Anweisung. Ohne break wird das Programm mit der nächsten Anweisung mit Bezeichnung fortgesetzt, und die Anweisungen werden bis zu einer break -Anweisung oder dem Ende der Anweisung ausgeführt. Diese Fortsetzung kann in einigen Situationen wünschenswert sein.

Die default -Anweisung wird ausgeführt, wenn kein caseconstant-expression -Wert mit dem Wert von expression übereinstimmt. Wenn keine default -Anweisung vorhanden ist und keine case -Übereinstimmung gefunden wird, wird keine der Anweisungen im switch -Text ausgeführt. Es kann höchstens eine default -Anweisung geben. Die default -Anweisung muss nicht am Ende stehen. Sie kann an beliebiger Stelle im Text der switch -Anweisung auftauchen. Eine case - oder default -Bezeichnung kann nur innerhalb einer switch -Anweisung erscheinen.

Der Typ von switchexpression und caseconstant-expression muss integral sein. Der Wert von jedem caseconstant-expression muss innerhalb des Anweisungstexts eindeutig sein.

Die case - und default -Bezeichnungen des switch -Anweisungstexts sind nur im ersten Test wichtig, in dem bestimmt wird, an welcher Stelle des Anweisungstexts die Ausführung beginnt. switch -Anweisungen können geschachtelt werden. Alle statischen Variablen werden vor dem Ausführen in einer switch-Anweisung initialisiert.

Hinweis

Deklarationen können am Anfang der Verbundanweisung stehen, die den switch-Text bildet, aber in den Deklarationen enthaltene Initialisierungen werden nicht ausgeführt. Mit der switch-Anweisung wird die Steuerung direkt an eine ausführbare Anweisung innerhalb des Texts übertragen. Dabei werden die Zeilen umgangen, die Initialisierungen enthalten.

In den folgenden Beispielen werden switch-Anweisungen veranschaulicht:

switch( c )
{
    case 'A':
        capital_a++;
    case 'a':
        letter_a++;
    default :
        total++;
}

Alle drei Anweisungen des switch -Texts in diesem Beispiel werden ausgeführt, wenn c gleich 'A' ist, da vor der folgenden -Anweisung keine casebreak -Anweisung steht. Die Ausführungssteuerung wird auf die erste Anweisung (capital_a++;) übertragen und im verbleibenden Text der Reihe nach fortgeführt. Wenn c gleich 'a' ist, werden letter_a und total erhöht. Wenn c nicht mit 'A' oder 'a' übereinstimmt, wird nur total inkrementiert.

switch( i )
{
    case -1:
        n++;
        break;
    case 0 :
        z++;
        break;
    case 1 :
        p++;
        break;
}

In diesem Beispiel folgt eine break -Anweisung auf jede Anweisung des switch -Texts. Die break -Anweisung erzwingt eine Beendigung vom Anweisungstext, nachdem eine Anweisung ausgeführt wurde. Wenn i gleich -1 ist, wird nur n inkrementiert. Die break -Anweisung, die auf die n++;-Anweisung folgt, führt dazu, dass die Ausführungssteuerung aus dem Anweisungstext übergeben wird und die übrigen Anweisungen übersprungen werden. Wenn i gleich 0 ist, wird dementsprechend nur z erhöht. Wenn i gleich 1 ist, wird nur p erhöht. Die abschließende break -Anweisung ist nicht unbedingt erforderlich, da die Steuerung am Ende der Verbundanweisung aus dem Text übergeben wird. Aus Konsistenzgründen ist sie jedoch enthalten.

Eine einzelne Anweisung kann wie das folgende Beispiel zeigt mehrere case -Bezeichnungen tragen:

switch( c )
{
    case 'a' :
    case 'b' :
    case 'c' :
    case 'd' :
    case 'e' :
    case 'f' :  convert_hex(c);
}

In diesem Beispiel wird im Fall, dass constant-expression einem beliebigen Buchstaben zwischen 'a' und 'f' entspricht, die convert_hex-Funktion aufgerufen.

Microsoft-spezifisch

In Microsoft C wird die Anzahl von case -Werten in einer switch -Anweisung nicht beschränkt. Die Anzahl wird nur durch den verfügbaren Speicher beschränkt. ANSI C erfordert, dass mindestens 257 case -Abschnitte in einer switch -Anweisung zulässig sind.

Bei Microsoft C sind die Microsoft-Erweiterungen in der default-Einstellung aktiviert. Verwenden Sie die /Za-Compileroption, um diese Erweiterungen zu deaktivieren.

Siehe auch

switch-Anweisung (C++)