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

C/C++ switch 語句 default 標籤位置與 Fall-through 行為詳解

     編輯:關於C語言

現象觀察

許多開發者習慣將 default 放在 switch 結尾,但標準允許置於任意位置。若 default 不在末尾且缺少 break,將發生「貫穿」行為,這常導致邏輯錯誤。

程式碼示例

int x = 8; // 或 x = 1
switch(x) {
    default:
        { printf("de "); }
    case 1:
        { printf("1 "); }
    case 2:
        { printf("2 "); }
    case 3:
        { printf("3 "); }
}

執行結果對比

輸入 x輸出說明
8de 1 2 3無匹配 case,進入 default,其後無 break 依序執行 case 1,2,3
11 2 3匹配 case 1,執行後無 break 貫穿執行 case 2,3

核心規則

  1. default 只是標籤:可理解為「其他情況」,不具備終止 switch 的功能。
  2. Switch 以大括號結束為界:而非以 default 為結束。
  3. Fall-through 機制:匹配標籤後,若無 break/return/throw,將繼續執行後續所有 case/default 代碼,直到 switch 結束或遇到跳轉語句。

最佳實踐建議

  • 習慣將 default 放在最後,符合直覺,減少誤解。
  • 每個 case 明確加上 break,或用 [[fallthrough]] (C++17) 註釋刻意貫穿。
  • 若需「預設動作後再執行特定 case」,請重構邏輯(如函式封裝),避免依賴落穿行為。

總結

default 位置靈活但危險。**Switch 結束靠大括號,不靠 default**。理解落穿機制,養成加 break 習慣,是寫出健壯分支代碼的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved