přepínač příkazu (C++)
Umožňuje výběr mezi více částí kódu v závislosti na hodnotě nedílnou 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 které je jednoznačné převodu na integrálního typu.Nedílnou propagace se provádí podle popisu v Nedílnou propagace.
switch Prohlášení subjektu se skládá z řady případ štítky a volitelným výchozí popisek.Dva konstantní výrazy v případ příkazy lze vyhodnotit na stejnou hodnotu.Výchozí štítek může být pouze jednou.Označené příkazy nejsou syntaktické požadavky, ale switch prohlášení je nesmyslné bez nich.Výchozí příkaz je třeba nesmí přijít na konci; může se zobrazit kdekoli v textu příkazu switch.Case nebo výchozí popisek může být pouze uvnitř příkazu switch.
Konstantní výraz v každém případ popisek je převeden na typ výraz a v porovnání s výraz pro rovnost.Řízení předá prohlášení, jehož případkonstantní výraz s hodnotou výraz. Výsledné chování je uveden v následující tabulce.
Chování příkazu Switch
Podmínka |
Akce |
---|---|
Převedené hodnoty odpovídá převedených řízení výraz. |
Ovládací prvek bude převeden na příkaz následující tento popisek. |
Žádný z konstant neodpovídá konstanty v případ štítky; výchozí popisek je k dispozici. |
Ovládací prvek bude převeden do výchozí popisek. |
Žádný z konstant neodpovídá konstanty v případ štítky; Výchozí štítek není k dispozici. |
Ovládací prvek bude převeden na příkaz následující po switch prohlášení. |
Pokud je nalezen odpovídající výraz, řízení nesmí bránit následné případ nebo výchozí štítky.Konec zastavit a přenést řízení na příkaz následující po použití příkazu switch prohlášení.Bez Konec prohlášení, každé prohlášení porovnané případ popisek na konec switch, včetně výchozí, je spuštěn.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 tomto příkladu capa je zvýšen, pokud c je velkým A.break Prohlášení po capa++ ukončí provádění switch předá subjektu prohlášení a řízení while smyčky.Bez break prohlášení, lettera a nota by rovněž zvýšen.Obsluhován podobným účelem break za case 'a'.Pokud c je malá a, lettera je zvýšen a break příkaz ukončí switch prohlášení subjektu.Pokud c není a nebo A, default provedení příkazu.
Vnitřní blok switch výkaz může obsahovat definic s inicializací, jako jsou dosažitelné –, není obejít všechny možné spuštění cesty.Názvy zavedena 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;
}
}
A switch prohlášení mohou být vnořené.V takových případech případ nebo výchozí štítky přidružit nejblíže k switch prohlášení, která je obklopuje.
Konkrétní společnosti Microsoft
Microsoft c neomezuje počet případů hodnot v switch prohlášení.Počet je omezen pouze dostupné paměti.ANSI c vyžaduje alespoň 257 v případě popisky povoleny switch prohlášení.
Výchozí nastavení pro Microsoft C je, že jsou povolena rozšíření Microsoft.Použití /Za volba kompilátoru zakázání těchto rozšíření.