为什么此代码打印0223?

Ozy*_*ias -2 c c++ for-loop switch-statement

为什么案例2在此for循环中被评估两次?

for (int x = 0; x <4; x++)
{
    switch (x)
    {
        case 2: printf("%d", x);
        case 0: printf("%d", x);
        default: break;
        case 3: printf("%d", x);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了补充一点,这不是一段合法的代码.上周我的朋友工作考试中出现了一些问题.

zne*_*eak 6

案例2没有得到两次评估:它只被评估一次.但是,如果不使用break语句结束案例,而不是离开switch,则继续执行下一个案例.

换句话说,当x为2时,执行跳转到case 2并调用printf("%d", x)x = 2.然后,执行进入情况0,并且printf("%d", x)使用x的调用仍然等于2.然后,执行进入default情况,在那里它命中一个break语句最后离开了switch.

  • 在C中,`case`不是保护执行的条件.它更像是一个'goto`标签. (3认同)