Share via


switch 語句 (C)

switchcase 語句可協助控制複雜的條件式和分支作業。 switch 陳述式會將控制權轉移到其主體中的陳述式。

語法

selection-statement:
switch ( expression ) statement

labeled-statement:
case constant-expression : statement
default : statement

備註

switch語句會根據 的值,讓控制項在其語句主體中傳送至其中一個 labeled-statementexpression

expression和 的值 constant-expression 必須有整數型別。 在 constant-expression 編譯時期必須有明確的常數整數值。

控制項會傳遞至 case 語句,其 constant-expression 值符合 的值 expressionswitch語句可以包含任意數目的 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 到達 語句的 或 結尾為止。 在某些情況下,可能需要此接續。

如果沒有 caseconstant-expression 值等於 的值 expression ,就會 default 執行 語句。 default如果沒有語句,而且找不到 case 相符專案,則不會執行本文中的任何 switch 語句。 最多可以有一個 default 語句。 default語句不需要在結尾。 它可能會出現在 語句主體中的任何 switch 位置。 casedefault 標籤只能出現在 語句內 switch

caseconstant-expression 的類型 switchexpression 必須是整數。 每個 caseconstant-expression 的值在語句主體內必須是唯一的。

語句 case 主體的 switchdefault 標籤只有在初始測試中才重要,可判斷語句主體中的執行開始位置。 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_atotal 會遞增。 只有在 total 不等於 'A''a'c 才會遞增。

switch( i )
{
    case -1:
        n++;
        break;
    case 0 :
        z++;
        break;
    case 1 :
        p++;
        break;
}

在此範例中 break ,語句會遵循本文的每個語句 switchbreak語句會在執行一個語句之後,強制結束語句主體。 如果 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 caseswitch 標籤。

default適用于 Microsoft C 的 是啟用 Microsoft 擴充功能。 使用 /Za 編譯器選項來停用這些延伸模組。

另請參閱

switch 語句 (C++)