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
case 開始比較,相等則進入該標籤 **及其後所有語句**,直到遇到 break 或 }。case 匹配,則進入 default (位置可任意,慣例放最後)。case / default 之間 **無隱含 break**,需顯式 break 阻斷。case 1:3≠1 → 跳過。default:無條件匹配 → 執行 c++ (c=4)。break → 繼續執行 case 2:c++ (c=5)。} 結束 switch。結果 c=5 (題目說 5,實際上述邏輯得 5;若初始 c=3,case 1 不執行,default 執行一次,case 2 執行一次,共 +2 → 5)。
c++ (c=3)。case 結尾 **必加 break** (或 return/goto),需穿透時加註解 /* fallthrough */ (C23 可用 [[fallthrough]] 屬性)。default 放最後,處理預期外數值並記錄日誌/斷言。