+ -
当前位置:首页 → 问答吧 → 谁给解释下这个输出

谁给解释下这个输出

时间:2010-08-09

来源:互联网

for (int i = 0; i < 5; i++)
  {
    switch (i)
    {
      case 4:
      {
        printf("4\n");
        break;
        {
          case 1:
          printf("1\n");
          break;
        }
      }
      case 2:
        printf("2\n");
        break;
    }
  }

输出:
1
2
4

为什么会走case 1的分支?我在VC2010和gcc下得到的输出是一致的。

作者: yayapa   发布时间: 2010-08-09

第一次见这么写case的
LZ是不是有点闲得慌呀

作者: hellioncu   发布时间: 2010-08-09

为什么不会?

作者: caravsapm70   发布时间: 2010-08-09

case定位的本质是goto到对应标号。可以查看汇编码去确认下。

作者: davelv   发布时间: 2010-08-09



QUOTE:
为什么不会?
caravsapm70 发表于 2010-08-09 17:33




    同问   为什么不会?

作者: kmindg   发布时间: 2010-08-09

  1. .L7:
  2.         movl        28(%esp), %eax
  3.         cmpl        $2, %eax
  4.         je        .L5
  5.         cmpl        $4, %eax
  6.         je        .L6
  7.         cmpl        $1, %eax
  8.         je        .L4
  9.         jmp        .L3
复制代码
根据汇编代码貌似比较顺序是2,4,1
话说你这么写还真蛋疼…………

作者: daybreakcx   发布时间: 2010-08-09