You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言switch语句中default分支未执行问题咨询

关于switch语句中default分支未执行的疑问

代码示例

#include <stdio.h>

enum
{
    ONE=1,
    THREE=3,
    SEVEN=7,
    FORTYTHREE=43,
    SIXTYFOUR=64,
    ONEHUNDREDSEVEN=107,
    TWOHUNDREDTHIRTEEN=213,     
    ONEHUNDREDSIXTYSEVEN=167,
    THREEHUNDREDNINETEEN=319,
    FIVEHUNDRED=500,
    ONETHOUSAND=1000,
    NINENINENINENINE=9999,
    MAX_VAL,
};

int main() {
    
    int x = ONE;
    int y = 0;
    switch (x)
    {
        case ONETHOUSAND:
            y = x;
            break;
        case FIVEHUNDRED:
            y = x;
            break;
        case FORTYTHREE:
            y = x;
            break;
        case SIXTYFOUR:
            y = x;
            break;
        case ONEHUNDREDSEVEN:
            y = x;
            break;
        case TWOHUNDREDTHIRTEEN:
            y = x;
            break;
        case ONEHUNDREDSIXTYSEVEN:
            y = x;
            break;
        case THREEHUNDREDNINETEEN:
            y = x;
            break;
        default:
            printf( "Hit default %d\n", x ); //How is this not executed?
        case ONE:
            y = x;
            printf("HERE!!!!\n");
            break;
        case THREE:
            y = x;
            break;
        case SEVEN:
            y = x;
            break;
    }

    return 0;
}

疑问

执行上述代码后仅输出HERE!!!!,明明default分支位于匹配的case ONE之前,为何default分支的代码未被执行?此前了解到switch中case与default的顺序不影响执行,对此行为存在疑问。

解答

核心逻辑:switch是「匹配跳转,顺序执行」

switch语句的执行流程可以拆解为两步:

  1. 计算switch括号内表达式的值(这里x等于ONE)
  2. 在所有case标签中查找匹配项,找到后直接跳转到该case对应的代码行开始执行,完全跳过它之前的所有分支(包括default)

只有当没有任何case标签能匹配表达式的值时,程序才会去执行default分支——不管default在switch中的位置是前是后。

在你的代码里,x的值明确匹配case ONE,所以程序直接跳转到该case的代码块执行,前面的default分支根本不会被触发,这是完全符合C语言switch语句设计逻辑的正常行为。

补充:default的本质是「兜底分支」

default分支的作用是处理所有未被case覆盖的情况,它的存在不影响case的匹配优先级。哪怕把default放在switch的最开头,只要有case能匹配表达式的值,程序依然会跳过default,直接执行匹配的case分支。

内容的提问来源于stack exchange,提问作者Semi charmed kind of guy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:47:08