?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
根據(jù)整數(shù)參數(shù)的值執(zhí)行代碼。
用于需要根據(jù)整數(shù)值執(zhí)行許多代碼分支中的一個(gè)或多個(gè)分支的情況。
開關(guān)(表達(dá)式)語句 |
---|
表達(dá) | - | 整數(shù)類型的任何表達(dá)式(char,signed或unsigned integer或枚舉) |
---|---|---|
聲明 | - | 任何陳述(通常是復(fù)合陳述)。情況:和默認(rèn)值:標(biāo)簽允許在聲明中,并打破; 聲明有特殊的含義。 |
case constant_expression:語句 | (1) | |
---|---|---|
默認(rèn):語句 | (2) |
constant_expression | - | 任何整數(shù)常量表達(dá)式 |
---|
case:
只要所有constant_expressions的值都是唯一的(在轉(zhuǎn)換為提升的表達(dá)式類型之后),switch語句的主體可以具有任意數(shù)量的標(biāo)簽。最多default:
只能有一個(gè)標(biāo)簽(盡管嵌套的開關(guān)語句可能使用自己的default:
標(biāo)簽,或者case:
標(biāo)簽的常數(shù)與封閉開關(guān)中使用的常數(shù)相同)。
如果在轉(zhuǎn)換為提升的表達(dá)式類型后,表達(dá)式求值為等于constant_expressions之一的值,那么控制權(quán)將轉(zhuǎn)移到標(biāo)有該constant_expression的語句。
如果表達(dá)式計(jì)算出的值與任何case:
標(biāo)簽都不匹配,并且default:
標(biāo)簽存在,則控件將轉(zhuǎn)移到標(biāo)簽標(biāo)簽所對應(yīng)的語句中default:
。
如果表達(dá)式求值的值與任何case:
標(biāo)簽都不匹配,且default:
標(biāo)簽不存在,則不會執(zhí)行任何開關(guān)主體。
break語句在遇到語句中的任何地方時(shí)會退出switch語句:
switch(1) { case 1 : puts("1"); // prints "1", case 2 : puts("2"); // then prints "2" ("fall-through")}
switch(1) { case 1 : puts("1"); // prints "1" break; // and exits the switch case 2 : puts("2"); break;}
與所有其他選擇和迭代語句一樣,switch語句建立塊范圍:表達(dá)式中引入的任何標(biāo)識符在語句后超出范圍。如果一個(gè)VLA或其他具有不同修改類型的標(biāo)識符在其范圍內(nèi)有一個(gè)case或者default標(biāo)簽,則整個(gè)switch語句必須在其范圍內(nèi)(換句話說,VLA必須在整個(gè)交換機(jī)之前或之后最后一個(gè)標(biāo)簽):switch(expr){int i = 4; //不是VLA; 可以在這里聲明f(i); //永遠(yuǎn)不會調(diào)用// int ai; //錯(cuò)誤:這里不能聲明VLA案例0:i = 17; 默認(rèn):; int ai; //可以在這里聲明VLA printf(“%d \ n”,i); //如果expr == 0則打印17,否則打印不確定的值} | (自C99以來) |
---|
switch
, case
, default
.
#include <stdio.h> void func(int x){ printf("func(%d): ", x); switch(x) { case 1: printf("case 1, "); case 2: printf("case 2, "); case 3: printf("case 3.\n"); break; case 4: printf("case 4, "); case 5: printf("case 5, "); default: printf("default.\n"); }} int main(void){ for(int i = 1; i < 10; ++i) func(i);}
輸出:
func(1): case 1, case 2, case 3.func(2): case 2, case 3.func(3): case 3.func(4): case 4, case 5, default.func(5): case 5, default.func(6): default.func(7): default.func(8): default.func(9): default.
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
6.8.4.2 switch語句(p:149-150)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
6.8.4.2 switch語句(p:134-135)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
3.6.4.2 switch語句