Dela via


switch Instruktion (C)

Instruktionerna switch och case hjälper till att kontrollera komplexa villkors- och förgreningsåtgärder. -instruktionen switch överför kontrollen till en -instruktion i dess brödtext.

Syntax

selection-statement:
switch ( expression ) statement

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

Anmärkningar

En switch -instruktion gör att kontrollen överförs till en labeled-statement i instruktionens brödtext, beroende på värdet för expression.

Värdena expression för och constant-expression måste ha en integrerad typ. Ett constant-expression måste ha ett entydigt konstant integralvärde vid kompileringstillfället.

Kontrollen skickas till -instruktionen case vars constant-expression värde matchar värdet för expression. Instruktionen switch kan innehålla valfritt antal case instanser. Inga två constant-expression värden i samma switch -instruktion kan dock ha samma värde. Körningen av instruktionstexten switch börjar vid den första instruktionen i eller efter matchande labeled-statement. Körningen fortsätter till slutet av brödtexten eller tills en break instruktion överför kontrollen från brödtexten.

Användningen av -instruktionen switch ser vanligtvis ut ungefär så här:

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
}

Du kan använda -instruktionen break för att avsluta bearbetningen av en viss etikett i -instruktionen switch . Den förgrenas till slutet av -instruktionen switch . Utan breakfortsätter programmet till nästa märkta instruktion och kör -uttrycken tills en break eller slutet av -instruktionen har nåtts. Den här fortsättningen kan vara önskvärd i vissa situationer.

-instruktionen default körs om inget caseconstant-expression värde är lika med värdet expressionför . Om det inte finns någon default -instruktion och ingen case matchning hittas, körs ingen av instruktionerna i brödtexten switch . Det kan finnas högst en default instruktion. -Instruktionen default behöver inte komma i slutet. Det kan visas var som helst i instruktionens switch brödtext. En case eller default en etikett kan bara visas i en switch -instruktion.

Typen av switchexpression och caseconstant-expression måste vara integrerad. Värdet för varje caseconstant-expression måste vara unikt i instruktionstexten.

Etiketterna case och default för instruktionens switch brödtext är endast betydande i det inledande testet som avgör var körningen startar i instruktionstexten. switch -instruktioner kan kapslas. Eventuella statiska variabler initieras innan de körs i några switch instruktioner.

Anmärkning

Deklarationer kan visas i huvudet på den sammansatta instruktionen som bildar brödtexten switch , men initieringar som ingår i deklarationerna utförs inte. Instruktionen switch överför kontrollen direkt till en körbar instruktion i brödtexten och kringgår de rader som innehåller initieringar.

Följande exempel illustrerar switch instruktioner:

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

Alla tre uttrycken i brödtexten switch i det här exemplet körs om c är lika 'A'med , eftersom ingen break instruktion visas före följande case. Körningskontrollen överförs till den första instruktionen (capital_a++;) och fortsätter i ordning via resten av brödtexten. Om c är lika med 'a', letter_a och total ökas. Endast total ökas när c inte är lika med 'A' eller 'a'.

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

I det här exemplet följer en break -instruktion varje instruktion i brödtexten switch . -instruktionen break tvingar fram ett avslut från instruktionstexten efter att en -instruktion har körts. Om i är lika med -1 ökas bara n . Följande break -instruktion n++; gör att körningskontrollen skickas ut från instruktionstexten och kringgår de återstående uttrycken. På samma sätt, om i är lika med 0, ökas bara z . Om i är lika med 1 ökas bara p . Den slutliga break instruktionen är inte absolut nödvändig, eftersom kontrollen passerar ut ur kroppen i slutet av den sammansatta instruktionen. Det ingår för konsekvens.

En enda instruktion kan ha flera case etiketter, vilket visas i följande exempel:

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

I det här exemplet, om constant-expression är lika med någon bokstav mellan 'a' och 'f', convert_hex anropas funktionen.

Microsoft-specifik

Microsoft C begränsar inte antalet case värden i en switch instruktion. Talet begränsas endast av det tillgängliga minnet. ANSI C kräver att minst 257 case etiketter tillåts i en switch -instruktion.

default För Microsoft C är att Microsoft-tilläggen är aktiverade. Använd kompilatoralternativet /Za för att inaktivera dessa tillägg.

Se även

switch Instruktion (C++)