題目程式碼
switch (X) {
case 'A': printf("A");
case 'B': printf("B");
default: printf("error");
}
假設 X = 'A'
執行流程
case 'A' 匹配,進入執行 printf("A")。
- 無
break,繼續「穿透」向下執行。
- 執行
case 'B' 的 printf("B")。
- 繼續穿透執行
default 的 printf("error")。
switch 結束。
輸出結果
A B error
// 實際螢幕上連續顯示: AerrorB? 取決於輸出緩衝,通常為 "ABerror"
選項對應
- A. A
- B. B
- C. error
- D. ABerror ← **正確答案**
核心知識點
- switch 是標籤跳轉,匹配後從該標籤**順序執行**至結尾或遇到
break。
break 用於**跳出 switch**,非迴圈專用。
default 可放任意位置,慣例放最後。
- C17 允許
case 1 ... 5: 範圍標籤 (GCC 擴展),標準 C 不支援。
最佳實踐
- 每個
case 結尾**必須加 break**,除非刻意穿透(並加註解 /* fallthrough */)。
- C23 引入
[[fallthrough]] 屬性,編譯器可檢查遺漏。
- 預設情況下,
default 也加 break 以防未來新增 case 導致邏輯錯誤。