switch
語句 (C)
switch
和 case
語句可協助控制複雜的條件式和分支作業。 switch
陳述式會將控制權轉移到其主體中的陳述式。
語法
selection-statement
:
switch (
expression
)
statement
labeled-statement
:
case
constant-expression
:
statement
default
:
statement
備註
switch
語句會根據 的值,讓控制項在其語句主體中傳送至其中一個 labeled-statement
expression
。
expression
和 的值 constant-expression
必須有整數型別。 在 constant-expression
編譯時期必須有明確的常數整數值。
控制項會傳遞至 case
語句,其 constant-expression
值符合 的值 expression
。 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
。
和 case
constant-expression
的類型 switch
expression
必須是整數。 每個 case
constant-expression
的值在語句主體內必須是唯一的。
語句 case
主體的 switch
和 default
標籤只有在初始測試中才重要,可判斷語句主體中的執行開始位置。 switch
語句可以是巢狀的。 所有靜態變數都會在執行之前初始化為任何 switch
陳述式。
注意
宣告可以出現在形成 switch
主體的複合陳述式的開頭,但不會執行包含在宣告中的初始化。 switch
陳述式會將控制權直接轉移給主體中的可執行陳述式,並且略過包含初始化的程式行。
下列範例說明 switch
陳述式:
switch( c )
{
case 'A':
capital_a++;
case 'a':
letter_a++;
default :
total++;
}
如果 c
等於 ,則會執行本範例中本文的所有三個語句 switch
,因為下列 case
前面沒有 break
出現任何 'A'
語句。 執行控制權會轉移到第一個陳述式 (capital_a++;
),並且依序繼續執行該主體的其餘部分。 如果 c
等於 'a'
,letter_a
和 total
會遞增。 只有在 total
不等於 'A'
或 'a'
時 c
才會遞增。
switch( i )
{
case -1:
n++;
break;
case 0 :
z++;
break;
case 1 :
p++;
break;
}
在此範例中 break
,語句會遵循本文的每個語句 switch
。 break
語句會在執行一個語句之後,強制結束語句主體。 如果 i
等於 -1,則只有 n
會遞增。 下列 break
語句 n++;
會導致執行控制項從語句主體中傳出,而略過其餘語句。 同樣地,如果,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
等於 和 'f'
之間的 'a'
任何字母,則會 convert_hex
呼叫 函式。
Microsoft 專有
Microsoft C 不會限制 語句中的 switch
值數目 case
。 此數目會受到可用記憶體的限制。 ANSI C 要求語句中至少允許 257 case
個 switch
標籤。
default適用于 Microsoft C 的 是啟用 Microsoft 擴充功能。 使用 /Za 編譯器選項來停用這些延伸模組。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應