本帖最后由 xiniuniu 于 2015-4-17 19:29 编辑
这个主要看编译器特性, 一般情况下, 当switch分支小于等于3个时, 生成的代码和if else几乎没有太大差别, 如果分支在4个以上, 编译器则会对代码进行算法上的优化, 比如- int a = 2;
-
- switch (a)
- {
- case 1:
- printf("1");
- break;
-
- case 2:
- printf("2");
- break;
-
- case 4:
- printf("4");
- break;
-
- case 5:
- printf("5");
- break;
-
- case 7:
- printf("7");
- break;
-
- default:
- break;
- }
- }
复制代码
代码会生成一个指针数组, 这个数组中一共有7个元素, 每个元素分别指向 不同case所对应代码起始处的地址
如上例, a = 2, 首先对a 进行减1操作 得到1,
然后1 和6比较, 看是否大于 6, 大于 6 直接跳到default代码处
不大于6 ,再和0比较, 小于0, 直接跳到default处
不小于0, 则直接执行 以1为下标的数组中指向地址处代码
如果用if else可能要判断很多次, 而用以上优化后的代码,最多也就判断3次, 如果case语句有几十个的情况下呢? 显然这时要比if else效率得多
较少的分支用if else 和switch都无所谓, 当分支较多,而又比较连续, switch是不二之选
|