switch
陳述式 (C)
switch
和 case
陳述式有助於控制複雜的條件作業和分支作業。 switch
陳述式會將控制權轉移到其主體中的陳述式。
語法
selection-statement
:
switch (
expression
)
statement
labeled-statement
:
case
constant-expression
:
statement
default
:
statement
備註
根據 expression
的值,switch
陳述式會導致控制項傳輸至在其陳述式主體中的一個 labeled-statement
。
expression
和每個 constant-expression
的值都必須有整數類型。 constant-expression
在編譯時期必須具有明確的常數整數值。
控制項會傳遞至 constant-expression
值符合 expression
值的 case
陳述式。 switch
陳述式可以包含任何數量的 case
執行個體。 不過,相同的 switch
陳述式內沒有任何兩個 constant-expression
值可以有相同的值。 switch
陳述式主體的執行會從比對 labeled-statement
之後的第一個陳述式開始。 執行會繼續直到主體結束,或直到 break
陳述式將控制項傳輸出主體為止。
switch
陳述式的用法通常如下所示:
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
}
您可以使用 break
陳述式結束處理 switch
陳述式內的特定標記陳述式。 它會分支至 switch
陳述式的結尾。 若沒有 break
,程式會繼續到下一個標記陳述式,並且執行陳述式直到出現 break
,或達到陳述式結尾為止。 在某些情況下,可能需要此接續。
如果沒有 case
constant-expression
值等於 expression
的值,則會執行 default
陳述式。 如果沒有 default
陳述式,而且找不到 case
相符專案,則不會執行 switch
主體中的陳述式。 最多可以有一個 default
陳述式。 default
陳述式不必在結尾。 它可能會出現在 switch
陳述式主體中的任何位置。 case
或 default
標籤只能出現在 switch
陳述式內。
switch
expression
和 case
constant-expression
的類型必須是整數。 每個 case
constant-expression
的值在陳述式主體中都必須是唯一的。
switch
陳述式的 case
和 default
標籤只有在決定從陳述式主體中的哪一個位置開始執行的初始測試中具有意義。 switch
陳述式可以是巢狀結構。 所有靜態變數都會在執行之前初始化為任何 switch
陳述式。
注意
宣告可以出現在形成 switch
主體的複合陳述式的開頭,但不會執行包含在宣告中的初始化。 switch
陳述式會將控制權直接轉移給主體中的可執行陳述式,並且略過包含初始化的程式行。
下列範例說明 switch
陳述式:
switch( c )
{
case 'A':
capital_a++;
case 'a':
letter_a++;
default :
total++;
}
如果 c
等於 'A'
,本範例中 switch
主體的三個陳述式會全數執行,因為下列 case
之前不會顯示任何 break
陳述式。 執行控制權會轉移到第一個陳述式 (capital_a++;
),並且依序繼續執行該主體的其餘部分。 如果 c
等於 'a'
,letter_a
和 total
會遞增。 當 c
不等於 'A'
或 'a'
時,只會遞增 total
。
switch( i )
{
case -1:
n++;
break;
case 0 :
z++;
break;
case 1 :
p++;
break;
}
在此範例中,break
陳述式會接在 switch
主體的每個陳述式之後。 break
陳述式會在執行某個陳述式之後,強制從陳述式主體結束。 如果 i
等於 -1,則只有 n
會遞增。 陳述式 n++;
後面的 break
會導致將執行控制項傳遞到陳述式主體之外,並且略過剩餘的陳述式。 同樣地,如果,i
等於 0,只有 z
會遞增;如果 i
等於 1,只有 p
會遞增。 最終的 break
陳述式並非絕對必要,因為控制項會在複合陳述式的結尾傳遞到主體以外。 為了一致性而包含此陳述式。
如下列範例所示,單一陳述式可以多載多個 case
標籤:
switch( c )
{
case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
case 'f' : convert_hex(c);
}
在此範例中,如果 constant-expression
等於 'a'
與 'f'
之間的任何字母,則會呼叫 convert_hex
函式。
Microsoft 專有
Microsoft C 不會限制 switch
陳述式中 case
值的數量。 此數目會受到可用記憶體的限制。 ANSI C 要求在 switch
陳述式中允許至少 257 個 case
標籤。
Microsoft C 的 default 是已啟用 Microsoft 延伸模組。 使用 /Za 編譯器選項以停用這些延伸模組。