switch — instrukcja (C++)
Pozwala na wybór między wielokrotnymi sekcjami kodu, w zależności od wartości wyrażenia liczby całkowitej.
switch ( expression )
case constant-expression : statement
[default : statement]
Uwagi
Wyrażenie musi być typu integralnego lub typu klasy, dla którego istnieje jednoznaczna konwersja na typ integralny.Promocja typu całkowitego odbywa się zgodnie z opisem w Promocji typu całkowitego.
Instrukcja switch składa się z serii case etykiet i opcjonalnej domyślnej etykiety.Żadne dwa wyrażenia stałe w instrukcjach przypadku nie mogą oszacować tej samej wartości.Domyślna etykieta może wystąpić tylko raz.Instrukcje opatrzone etykietami nie są wymaganiami składni, ale instrukcja switch bez nich jest pozbawiona znaczenia. Domyślna deklaracja nie musi pojawić się na końcu; może występować w dowolnym miejscu treści instrukcji przełączania.Sprawa lub domyślna etykieta może wystąpić tylko wewnątrz instrukcji switch.
Wyrażenie stałe w każdym przypadku etykiety jest konwertowane na typ wyrażenie i w porównaniu z wyrażeniem dla równości.Kontrola przechodzi do instrukcji, których przypadekwyrażenie stałago odpowiada wartości wyrażenie.Zachowanie wynikowe jest przedstawione na poniższej tabeli.
Zachowanie instrukcji przełączania
Warunek |
Akcja |
---|---|
Przekonwertowane wartości zgodne z promowanym wyrażeniem kontrolowania. |
Kontrola jest przekazywana do instrukcji następującej po tej etykiecie. |
Żadna ze stałych nie pasuje do stałych w etykietach przypadku; istnieje domyślna etykieta. |
Kontrola jest przekazywana do domyślnej etykiety. |
Żadna ze stałych nie pasuje do stałych w etykietach przypadku; nie istnieje domyślna etykieta. |
Kontrola jest przekazywana do instrukcji znajdującej się po switch instrukcji. |
Jeśli zostanie znalezione pasujące wyrażenie, formant nie jest utrudniane przez kolejne etykiety case lub default.Instrukcja wstrzymania jest używana, aby zatrzymać wykonywanie, a kontrola jest przekazywana do instrukcji następującej po instrukcji switch.Bez instrukcji przerwij każda instrukcja z dopasowanej etykiety przypadku do końca switch, łącznie z domyślnym, jest wykonana.Na przykład:
// switch_statement1.cpp
#include <stdio.h>
int main() {
char *buffer = "Any character stream";
int capa, lettera, nota;
char c;
capa = lettera = nota = 0;
while ( c = *buffer++ ) // Walks buffer until NULL
{
switch ( c )
{
case 'A':
capa++;
break;
case 'a':
lettera++;
break;
default:
nota++;
}
}
printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n",
capa, lettera, (capa + lettera + nota) );
}
W powyższym przykładzie capa jest zwiększana, gdy c jest napisane dużą literą A.Instrukcja break po capa++ kończy wykonywanie switch treści instrukcji i przekazuje kontrolę pętli while.Bez instrukcji break, lettera i nota również by wzrosła.Podobny cel jest obsługiwany przez break instrukcję dla case 'a'.Jeśli c ma wartość a pisane małą literą, lettera jest zwiększane, a instrukcja break kończy treść instrukcji switch.Jeśli c nie ma wartości a lub A, zostaje wykonana instrukcja default.
Wewnętrzny blok switch instrukcji może zawierać definicje z inicjalizacji, tak długo, jak są one dostępne — to znaczy nie są pomijane przez wszystkie możliwe wykonania ścieżki.Nazwy wprowadzone za pomocą tych deklaracji mają zakres lokalny.Na przykład:
// switch_statement2.cpp
// C2360 expected
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
switch( tolower( *argv[1] ) )
{
// Error. Unreachable declaration.
char szChEntered[] = "Character entered was: ";
case 'a' :
{
// Declaration of szChEntered OK. Local scope.
char szChEntered[] = "Character entered was: ";
cout << szChEntered << "a\n";
}
break;
case 'b' :
// Value of szChEntered undefined.
cout << szChEntered << "b\n";
break;
default:
// Value of szChEntered undefined.
cout << szChEntered << "neither a nor b\n";
break;
}
}
Wyrażenie switch może być zagnieżdżone.W takich przypadkach, przypadek lub domyślne etykiety są skojarzone z najbliższą instrukcją switch, która je otacza.
Specyficzne dla firmy Microsoft
Język C firmy Microsoft nie ogranicza liczby przypadków wartości w instrukcji switch.Liczba jest ograniczona jedynie ilością dostępnej pamięci.ANSI C wymaga co najmniej 257 etykiet wielkości liter dozwolonych w switch instrukcji.
Domyślne ustawienie dla Microsoft C: włączone są rozszerzenia Microsoft.Użyj opcji kompilatora /Za, aby wyłączyć te rozszerzenia.