Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.