switch — instrukcja (C)
Instrukcje switch i case pomagają kontrolować złożone operacje warunkowe i operacje rozgałęzień.Instrukcja switch przekazuje sterowanie do instrukcji w jej treści.
Składnia
instrukcja-wyboru:
**switch (wyrażenie)**instrukcjaetykieta-wyrażenia:
case wyrażenie-stałe : instrukcjadefault : instrukcja
Kontrola przechodzi do instrukcji, dla której case wyrażenie-stałe odpowiada wartości switch ( wyrażenie ).Instrukcja switch może zawierać dowolną liczbę wystąpień case, ale dwa wystąpienia case z tą samą instrukcją switch nie mogą mieć tej samej wartości.Wykonanie treści instrukcji rozpoczyna się od wybranej instrukcji i przechodzi do końca treści lub do momentu instrukcji break, która przekazuje sterowanie poza treść instrukcji.
Użycie instrukcji switch zwykle wygląda następująco:
switch ( wyrażenie )
{
deklaracje
.
.
.
case wyrażenie-stałe :
instrukcje wykonywane, jeśli wyrażenie jest równe
wartość tego wyrażenia-stałego
.
.
.
break;
default :
instrukcje wykonywane, jeżeli wyrażenie nie jest równe
dowolne przypadki wyrażeń stałych
}
Można użyć instrukcji break do końca przetwarzania określonego przypadku w ramach instrukcji switch i do rozgałęzień na końcu instrukcji switch.Bez instrukcji break, program przejdzie do następnej instrukcji case, wykonując instrukcji aż do break lub osiągnięcia końca instrukcji.W niektórych sytuacjach, ta kontynuacja może być pożądana.
Instrukcja default jest wykonywana, jeśli żaden przypadek case wyrażenie-stałe nie jest równe wartości switch ( wyrażenie ).Jeśli instrukcja default zostanie pominięta i nie zostanie znaleziony żaden dopasowany case, żadna z instrukcji treści switch nie zostanie wykonana.Może istnieć co najwyżej jedna instrukcja default.Instrukcja default nie musi pojawić się na końcu; może występować w dowolnym miejscu w treści instrukcji switch.Etykiety case lub default mogą występować tylko wewnątrz instrukcji switch.
Typ switch wyrażenie i case wyrażenie-stałe musi być integralny.Wartość każdego case wyrażenie-stałe musi być unikatowa w obrębie treści instrukcji.
Etykiety case i default treści instrukcji switch mają znaczenie tylko w testowaniu wstępnym, i określają gdzie rozpoczyna się wykonywanie w ciele instrukcji.Instrukcje switch mogą być zagnieżdżone.Wszystkie zmienne statyczne są zainicjowane przed wykonaniem dowolnej instrukcji switch.
[!UWAGA]
Deklaracje mogą być wyświetlane w nagłówku instrukcji złożonych tworzących treść switch, ale inicjalizacje zawarte w deklaracjach nie są wykonywane.Instrukcja switch przekazuje sterowanie bezpośrednio do pliku wykonywalnego treści instrukcji, pomijając wiersze, które zawierają inicjalizacje.
Poniższe przykłady ilustrują instrukcje switch:
switch( c )
{
case 'A':
capa++;
case 'a':
lettera++;
default :
total++;
}
Wszystkie trzy instrukcje treści switch w tym przykładzie są wykonywane, jeżeli c jest równe 'A', gdyż instrukcja break nie pojawia się w tym przypadku.Kontrola wykonania zostaje przeniesiona do pierwszej instrukcji (capa++;) i kontynuuje wykonywanie reszty treści.Jeżeli c jest równe 'a', lettera i total są zwiększane.Tylko total jest zwiększane, jeśli c nie jest równe 'A' lub 'a'.
switch( i )
{
case -1:
n++;
break;
case 0 :
z++;
break;
case 1 :
p++;
break;
}
W tym przykładzie, instrukcja break następuje po każdej instrukcji treści switch.Instrukcja break wymusza wyjście z ciała instrukcji po wykonaniu jednej instrukcji.Jeśli i jest równa -1, tylko n jest zwiększany o jeden.Etykieta break następująca po instrukcji n++; powoduje, że wykonanie kontroli wychodzi z treści instrukcji, z pominięciem pozostałych instrukcji.Podobnie, jeśli i jest równe 0, tylko z jest zwiększana; jeśli i jest równy 1, tylko p jest zwiększane o jeden.Ostatnia instrukcja break nie jest absolutnie niezbędna, ponieważ kontrola przechodzi z treści na koniec złożonych instrukcji, ale jest uwzględniona w spójności.
Pojedyncza instrukcja może przenosić wiele etykiet case, co ilustruje poniższy przykład:
case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
case 'f' : hexcvt(c);
W tym przykładzie, jeśli wyrażenie-stałe jest równe dowolnej literze z przedziału 'a' i 'f', funkcja hexcvt jest wywoływana.
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.
KONIEC informacji specyficznych dla firmy Microsoft