首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言 switch-case 預設標籤 default 執行順序與穿透行為

     編輯:C 語言問答

程式碼分析

int c = 3;
switch (c) {
    case 1: c++;        // c=4
    default: c++;       // c=5 (匹配 default,執行)
    case 2: c++;        // c=6 (無 break,穿透執行)
}
printf("c=%d\n", c); // 輸出 6

關鍵規則

  1. 匹配機制:從第一個 case 開始比較,相等則進入該標籤 **及其後所有語句**,直到遇到 break 或 }。
  2. default:若無 case 匹配,則進入 default (位置可任意,慣例放最後)。
  3. 穿透:case / default 之間 **無隱含 break**,需顯式 break 阻斷。

逐步追蹤 (c=3)

  1. 比較 case 1:3≠1 → 跳過。
  2. 比較 default:無條件匹配 → 執行 c++ (c=4)。
  3. 無 break → 繼續執行 case 2:c++ (c=5)。
  4. 遇 } 結束 switch。

結果 c=5 (題目說 5,實際上述邏輯得 5;若初始 c=3,case 1 不執行,default 執行一次,case 2 執行一次,共 +2 → 5)。

若 c=2

  1. 跳過 case 1。
  2. 匹配 case 2:執行 c++ (c=3)。
  3. 無後續語句 → 結束。結果 3。

最佳實踐

  • 每個 case 結尾 **必加 break** (或 return/goto),需穿透時加註解 /* fallthrough */ (C23 可用 [[fallthrough]] 屬性)。
  • default 放最後,處理預期外數值並記錄日誌/斷言。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved