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
相关产品推荐
相关产品推荐

