Udostępnij za pośrednictwem


switch Instrukcja (C)

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 case constant-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 switch expression i case constant-expression musi być całkowity. Wartość każdej z nich case constant-expression musi być unikatowa w treści instrukcji.

Etykiety case switch i default 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.

Zobacz też

switch Instrukcja (C++)