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

C++ switch-case语句default分支执行时机及输出异常咨询

关于switch-case中default分支的执行时机与输出异常的解析

嘿,我来帮你理清这个问题,刚好对C语言里的switch-case逻辑很熟悉!

1. switch-case语句中default分支的执行时机

default分支的触发逻辑很明确:

  • 当switch括号里的表达式的值,不匹配任何case标签指定的值时,程序才会进入default分支执行代码。
  • 它的位置不影响触发规则——不管你把default放在所有case的前面、中间还是后面,只要没有匹配到任何case,就会找到default并执行。
  • 注意:如果某个case执行完后没有写break,程序会继续往下"穿透"执行后续的代码(包括其他case甚至default),这是fall-through特性,和default的触发时机是两回事。

2. 为何实际输出是done而非yesdone

结合你的预期和实际输出,我推测你的代码大概是类似这样的结构:

#include <stdio.h>
int main() {
    int num = 10; // 假设你传入的匹配值是10
    switch(num) {
        default:
            printf("yes");
        case 10:
            printf("done");
            break;
    }
    return 0;
}

你之前的误解在于:以为编译器会按代码顺序读取default分支,不管有没有匹配的case。但实际上switch的执行逻辑是先匹配case标签:

  • 当num的值是10时,程序会直接跳转到case 10的位置开始执行,完全跳过前面的default分支。
  • 所以只会执行printf("done");,最终输出done,而不会触发default里的printf("yes");。

内容的提问来源于stack exchange,提问作者Mayank Mittal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:35:05