Sdílet prostřednictvím


switch – příkaz (C++)

Povoluje výběr z více částí kódu v závislosti na hodnotě integrálního výrazu.

switch ( expression )
   case constant-expression : statement
   [default   : statement]

Poznámky

Výraz musí být integrálního typu nebo typu třídy, pro kterou existuje jednoznačný převod na integrální typ.Integrální propagace se provádí podle popisu v nabídce Integrální propagace.

Tělo s příkazy switch sestává z řad popisků case a volitelného popisku default.Žádné dva konstantní výrazy u příkazu case nemohou hodnotit stejnou hodnotu.Výchozí popisek se může objevit pouze jednou.Označené příkazy nejsou syntaktickými požadavky, ale prohlášení switch bez nich nemá význam. Výchozí příkaz se nemusí nacházet pouze na konci a může se zobrazit kdekoli v textu příkazu switch.Případ nebo výchozí popisek se může nacházet pouze uvnitř příkazu switch.

Konstantní výraz v každém popisku případu se převede na typ výrazu a jeho rovnost je porovnána s výrazem.Ovládací prvek bude předán příkazu, jehož konstantní výraz case odpovídá hodnotě výrazu.Výsledné chování je uvedeno v následující tabulce.

Chování příkazu pro přepínání

Podmínka

Akce

Převedená hodnota odpovídá zpropagovanému kontrolnímu výrazu.

Ovládací prvek bude převeden na příkaz následující po daném štítku.

Žádná konstanta neodpovídá konstantě v popisku case. Byl nalezen popisek default.

Ovládací prvek bude převeden na výchozí štítek.

Žádná konstanta neodpovídá konstantě v popisku case. Nebyl nalezen popisek default.

Ovládací prvek bude převeden na příkaz následující po příkazu switch.

Pokud je nalezen odpovídající výraz, ovládací prvek není ovlivněn následujícími popisky case nebo default.Příkaz break slouží k zastavení spuštěného procesu a předání řízení příkazu následujícímu po prohlášení switch.Bez příkazu break je každý příkaz ze spárovaného štítku case spuštěn na konci switch, včetně default.Příklad:

// 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) );
}

V příkladu výše je capa zvýšen, pokud je parametr c je velké písmeno A.Příkaz break následující po capa++ ukončí provádění hlavní části příkazu switch a řízení se předá smyčce while.Bez příkazu break, lettera a nota by rovněž došlo ke zvýšení.K podobnému účelu slouží příkaz break pro case 'a'.Pokud c je malým a, lettera se zvyšuje a break ukončí příkaz switch těla příkazu.Pokud c není a nebo A, je proveden příkaz default.

Vnitřní blok příkazu switch může obsahovat definice s inicializacemi, dokud budou dosažitelné – to znamená nebudou obcházeny všemi možnými cestami spuštění.Názvy zavedené pomocí těchto prohlášení mají místní rozsah.Příklad:

// 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;
   }
}

Příkaz switch může být vnořený.V takových případech popisky case nebo default se přidružují k nejbližšímu příkazu switch, který je obklopuje.

Specifické pro Microsoft

Microsoft C neomezuje počet případových hodnoty v prohlášení switch.Počet je omezen pouze dostupnou pamětí.ANSI C vyžaduje alespoň 257 povolených popisků případu v příkazu switch.

Ve výchozím nastavení pro jazyk Microsoft C jsou rozšíření společnosti Microsoft povoleny.Použijte možnost kompilátoru /Za pro zákaz těchto rozšíření.

Viz také

Referenční dokumentace

Příkazy výběru (C++)

Klíčová slova jazyka C++

Používání popisků v příkazu case