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");
    }
}

此时的汇编语句:

  

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

原文地址:https://www.cnblogs.com/codexlx/p/13414907.html