C语言之switch语句与if...else..语句的比较及switch语句高效的原因


1.switch语句与if...else...语句的区别:

  • switch语句只进行等值判断,而if...else可以进行区间判断
  • switch结构的执行效率远远高于if...else。在分支条件比较多的情况下这种趋势愈发明显

2.switch语句高效的原因

  游戏中的快捷键常用switch语句实现功能

对比if...else和switch语句:

(1)一个简单的if...else...语句:

#include<stdio.h>

void main() {
    int x = 3;
    if (x == 1) {
        printf("x=1");
    }
    else if (x == 2) {
        printf("x=2");
    }
    else if (x == 3) {
        printf("x=3");
    }
    else {
        printf("xxx");
    }
}

 对应的汇编指令:

  

 

 大致意思是每次判断,判断如果不符合就下次判断,否则执行对应的代码

 

(4)switch语句

#include<stdio.h>

void main() {
    int x = 3;
    switch (x) {
    case 1:
        printf("x=1");
        break;
    case 2:
        printf("x=2");
        break;
    case 3:
        printf("x=3");
        break;
    default:
        printf("xxx");
    }
}

 对应的汇编指令:

  

 

switch语句会在case开始前进行x的判断,相等了就跳到对应的位置,否则就jmp到default的位置。

这里看好像与if else 相比并没有什么优势。

如果把switch语句的判断数加两个:

#include<stdio.h>

void main() {
    int x = 3;
    switch (x) {
    case 1:
        printf("x=1");
        break;
    case 2:
        printf("x=2");
        break;
    case 3:
        printf("x=3");
        break;
    case 4:
        printf("x=4");
        break;
    case 5:
        printf("x=5");
        break;
    default:
        printf("xxx");
    }
}

 

此时的汇编语句:

  

条件多的时候就会通过生成一张表,这个表里面存储所有分支的函数地址,一次就可以跳到对应的地址,避免了不停的判断。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM