switch语句中的default位置的解析

先来看几个实例

1、

    实例源代码为:

#include<stdio.h>
                                                    
int main()
{
    int i = 2;
    switch (i)
    {
        default:
            printf("%s\n", "default");
        case 1:
            printf("%s\n", "case 1");
        case 2:
            printf("%s\n", "case 2");
        case 3:
            printf("%s\n", "case 3");
    }
    return 0;
}

当i为2时输出为:  

  case 2

  case 3

 

当将i该为0时输出为:  

    default

    case 1

    case 2

    case 3

 

2、现在将default语句放在case语句的中间

    实例代码为:

#include<stdio.h>
                                                 
int main()
{
    int i = 2;
    switch (i)
    {
        case 1:
            printf("%s\n", "case 1");
        default:
            printf("%s\n", "default");
        case 2:
            printf("%s\n", "case 2");
        case 3:
            printf("%s\n", "case 3");
    }
    return 0;
}

当i为2时输出为:

    case 2

    case 3

 

当将i改为0时输出为:

 

    default

    case 2

    case 3

 

解析:其实switch语句一般是如下这样处理的(在编译器没有优化的情况下)

    【对于上面实例2的代码,这里用类似汇编代码的伪代码来说明其执行过程】

if(i == 1)

    jmp to case 1;

else if (i == 2)

    jmp to case 2;

else if (i == 3)

    jmp to case 3;

else

    jmp to default;

case 1:     printf("%s\n", "case 1");

default:    printf("%s\n", "default");

case 2:     printf("%s\n", "case 2");

case 3:     printf("%s\n", "case 3");

 

  上面用的说明方式有点不伦不类,但很说明问题。它给出了一种汇编代码解释switch语句的方式。

首先判断i与各个case后的条件值是否相等,然后进行相应的跳转。不管你编写的代码中default

放在那里,这里的条件判断都是先按顺序比较其他非default值,当这些条件都不满足的时候,

才跳转到default的相应代码处执行。将每一种情况的处理代码加上标号按你的语句给出的顺序排

列在开始判断语句的后面。这就是switch的汇编解析,即它真正被编译为可执行程序的样子。

这里给出的是一般的情况,编译器可能有各种优化的措施,其汇编代码可能和上面的形式不同

但效果是一样的,只要按照上面的原理去推就可以了。

  还可以参考这里

  你懂了吗?赶快弄两个实例验证一下吧。

转载于:https://www.cnblogs.com/yang-xiaodong/archive/2012/10/14/2723219.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值