許多開發者習慣將 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 | 輸出 | 說明 |
|---|---|---|
| 8 | de 1 2 3 | 無匹配 case,進入 default,其後無 break 依序執行 case 1,2,3 |
| 1 | 1 2 3 | 匹配 case 1,執行後無 break 貫穿執行 case 2,3 |
break/return/throw,將繼續執行後續所有 case/default 代碼,直到 switch 結束或遇到跳轉語句。[[fallthrough]] (C++17) 註釋刻意貫穿。default 位置靈活但危險。**Switch 結束靠大括號,不靠 default**。理解落穿機制,養成加 break 習慣,是寫出健壯分支代碼的關鍵。