switch
Příkaz (C)
Příkazy switch
pomáhají case
řídit složité operace podmíněného a větvení. Příkaz switch
přenese řízení na příkaz v jeho těle.
Syntaxe
selection-statement
:
switch (
expression
)
statement
labeled-statement
:
case
constant-expression
:
statement
default
:
statement
Poznámky
Příkaz switch
způsobí, že se ovládací prvek přenese do jednoho labeled-statement
v těle příkazu v závislosti na hodnotě expression
.
Hodnoty expression
a každý z nich constant-expression
musí mít celočíselný typ. V constant-expression
době kompilace musí mít jednoznačnou celočíselnou celočíselnou hodnotu.
Ovládací prvek předá case
příkaz, jehož constant-expression
hodnota odpovídá hodnotě expression
. Příkaz switch
může obsahovat libovolný počet case
instancí. Žádné dvě constant-expression
hodnoty ve stejném switch
příkazu však mohou mít stejnou hodnotu. switch
Spuštění těla příkazu začíná prvním příkazem v nebo po shodě labeled-statement
. Provádění pokračuje až do konce těla nebo dokud break
příkaz nepřenese kontrolu z těla.
switch
Použití příkazu obvykle vypadá přibližně takto:
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
}
Příkaz můžete použít break
k ukončení zpracování konkrétního popisovaného příkazu v rámci switch
příkazu. Vytvoří větve na konec switch
příkazu. Bez break
, program pokračuje k dalšímu označenému příkazu, provádění příkazů až do break
dosažení nebo konce příkazu. V některých situacích může být toto pokračování žádoucí.
Příkaz default
se provede, pokud se žádná case
constant-expression
hodnota nerovná hodnotě expression
. Pokud neexistuje žádný default
příkaz a nenajde se žádná case
shoda, žádný z příkazů v switch
těle se nespustí. Může existovat maximálně jeden default
příkaz. Příkaz default
nemusí přijít na konci. Může se zobrazit kdekoli v textu switch
příkazu. Uvnitř case
příkazu se může objevit switch
pouze popisek nebo default
popisek.
Typ switch
expression
a case
constant-expression
musí být integrální. Hodnota každého z nich case
constant-expression
musí být v textu příkazu jedinečná.
Popisky case
switch
těla default
příkazu jsou významné pouze v počátečním testu, který určuje, kde spuštění začíná v těle příkazu. switch
příkazy lze vnořit. Všechny statické proměnné se inicializují před spuštěním do libovolných switch
příkazů.
Poznámka:
Deklarace se mohou objevit v hlavě složeného příkazu tvořícího switch
tělo, ale inicializace zahrnuté do deklarací se neprovádí. Příkaz switch
přenáší řízení přímo do spustitelného příkazu v těle a obchází řádky, které obsahují inicializace.
Následující příklady ilustrují switch
příkazy:
switch( c )
{
case 'A':
capital_a++;
case 'a':
letter_a++;
default :
total++;
}
Všechny tři příkazy těla v tomto příkladu switch
jsou provedeny, pokud c
je rovna 'A'
, protože žádný break
příkaz se nezobrazí před následujícím case
. Řízení provádění se přenese na první příkaz (capital_a++;
) a pokračuje v pořadí přes zbytek těla. Je-li c
roven 'a'
, letter_a
a total
jsou inkrementovány. Pouze total
se zvýší, pokud c
se nerovná 'A'
nebo 'a'
.
switch( i )
{
case -1:
n++;
break;
case 0 :
z++;
break;
case 1 :
p++;
break;
}
V tomto příkladu se break
příkaz řídí každým příkazem switch
těla. Příkaz break
vynutí výstup z textu příkazu po provedení jednoho příkazu. Je-li i
roven hodnotě -1, n
je pouze zvýšení. Následující break
příkaz n++;
způsobí, že řízení provádění předává z textu příkazu a vynechá zbývající příkazy. Podobně platí, že pokud i
je rovna 0, z
pouze se zvýší; pokud i
se rovná 1, zvýší se pouze p
. Konečné break
prohlášení není nezbytně nutné, protože ovládací prvek předá tělo na konci složeného příkazu. Je součástí konzistence.
Jeden příkaz může obsahovat více case
popisků, jak ukazuje následující příklad:
switch( c )
{
case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
case 'f' : convert_hex(c);
}
V tomto příkladu, pokud constant-expression
se rovná libovolnému písmenu convert_hex
mezi 'a'
a 'f'
, funkce je volána.
specifické pro společnost Microsoft
Microsoft C neomezuje počet case
hodnot v switch
příkazu. Počet je omezen pouze dostupnou pamětí. ANSI C vyžaduje, aby v switch
příkazu bylo povoleno alespoň 257 case
popisků.
Jazyk default Microsoft C znamená, že jsou povolená rozšíření Microsoftu. K zakázání těchto rozšíření použijte možnost kompilátoru /Za .