Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Instrukcje switch i case ułatwiają kontrolowanie złożonych operacji warunkowych i rozgałęziania. Instrukcja switch przenosi kontrolkę do instrukcji w jej treści.
Składnia
selection-statement:
switch ( expression ) statement
labeled-statement:
case constant-expression : statement
default : statement
Uwagi
Instrukcja powoduje, że kontrolka switch jest przekazywana do jednej labeled-statement w treści instrukcji, w zależności od wartości expression.
expression Wartości i każdy constant-expression musi mieć typ całkowity. Element constant-expression musi mieć jednoznaczną stałą wartość całkowitą w czasie kompilacji.
Kontrolka przechodzi do instrukcji case , której constant-expression wartość odpowiada wartości expression. Instrukcja switch może zawierać dowolną liczbę case wystąpień. Jednak żadna z dwóch constant-expression wartości w tej samej instrukcji nie może mieć tej samej switch wartości. Wykonanie treści instrukcji switch rozpoczyna się od pierwszej instrukcji w lub po dopasowaniu labeled-statement. Wykonanie jest kontynuowane do końca treści lub do momentu break , aż instrukcja przenosi kontrolę poza treść.
Użycie instrukcji switch zwykle wygląda mniej więcej tak:
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
}
Instrukcję break można użyć do zakończenia przetwarzania określonej instrukcji oznaczonej etykietą w instrukcji switch . Odgałęzienia na końcu instrukcji switch . Bez breakprogramu program kontynuuje kolejną instrukcję oznaczoną etykietą, wykonując instrukcje do momentu osiągnięcia wartości lub break końca instrukcji. Ta kontynuacja może być pożądana w niektórych sytuacjach.
Instrukcja jest wykonywana, jeśli żadna default wartość nie caseconstant-expression jest równa wartości expression. Jeśli nie ma default instrukcji i nie case znaleziono dopasowania, żadna z instrukcji w switch treści nie zostanie wykonana. Może istnieć co najwyżej jedna default instrukcja. Instrukcja default nie musi nadejść na końcu. Może się pojawić w dowolnym miejscu w treści instrukcji switch . Etykieta case lub default może być wyświetlana tylko wewnątrz instrukcji switch .
Typ switchexpression i caseconstant-expression musi być całkowity. Wartość każdej z nich caseconstant-expression musi być unikatowa w treści instrukcji.
Etykiety casedefault i switch treści instrukcji są istotne tylko w początkowym teście, który określa, gdzie rozpoczyna się wykonywanie w treści instrukcji.
switch instrukcje mogą być zagnieżdżone. Wszystkie zmienne statyczne są inicjowane przed wykonaniem w dowolnej switch instrukcji.
Uwaga
Deklaracje mogą pojawiać się na czele instrukcji złożonej tworzącej switch treść, ale inicjacje zawarte w deklaracjach nie są wykonywane. Instrukcja switch przenosi kontrolkę bezpośrednio do instrukcji wykonywalnego w treści, pomijając wiersze zawierające inicjacje.
Poniższe przykłady ilustrują instrukcje switch :
switch( c )
{
case 'A':
capital_a++;
case 'a':
letter_a++;
default :
total++;
}
Wszystkie trzy instrukcje switch treści w tym przykładzie są wykonywane, jeśli c jest równe 'A', ponieważ żadna instrukcja nie break jest wyświetlana przed następującą caseinstrukcją . Kontrolka wykonywania jest przenoszona do pierwszej instrukcji (capital_a++;) i jest kontynuowana w kolejności przez pozostałą część treści. Jeśli c wartość jest równa 'a', letter_a i total są zwiększane. Wartość jest zwiększana tylko total wtedy, gdy c wartość nie jest równa 'A' lub 'a'.
switch( i )
{
case -1:
n++;
break;
case 0 :
z++;
break;
case 1 :
p++;
break;
}
W tym przykładzie instrukcja jest zgodna break z każdą instrukcją switch treści. Instrukcja break wymusza wyjście z treści instrukcji po wykonaniu jednej instrukcji. Jeśli i wartość jest równa -1, tylko n jest zwiększana. Poniższa break instrukcja n++; powoduje, że kontrolka wykonywania jest pomijana z treści instrukcji, pomijając pozostałe instrukcje. Podobnie, jeśli i wartość jest równa 0, tylko z jest zwiększana; jeśli i jest równa 1, tylko p jest zwiększana. Ostateczna break instrukcja nie jest ściśle niezbędna, ponieważ kontrola przechodzi poza treść na końcu instrukcji złożonej. Jest on uwzględniony w celu zapewnienia spójności.
Pojedyncza instrukcja może zawierać wiele case etykiet, jak pokazano w poniższym przykładzie:
switch( c )
{
case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
case 'f' : convert_hex(c);
}
W tym przykładzie, jeśli constant-expression równa się dowolna litera między 'a' i 'f', funkcja jest wywoływana convert_hex .
specyficzne dla firmy Microsoft
Język Microsoft C nie ogranicza liczby case wartości w instrukcji switch . Liczba jest ograniczona tylko przez dostępną pamięć. Język ANSI C wymaga, aby co najmniej 257 case etykiet było dozwolonych w instrukcji switch .
Dla default firmy Microsoft C jest to, że rozszerzenia firmy Microsoft są włączone. Użyj opcji /Za kompilatora, aby wyłączyć te rozszerzenia.