C语言优化实例:为了消除嵌套switch-case聪明的做法
2015-12-02 13:39
519 查看
我们有可能会写出或者遇到类似这种代码:
这时能够考虑将两个嵌套的switch-case语句通过以下的方式转换为一个switch-case语句:
一般地,expr1和expr2的label情况不会太多。值也不会太大,能够先确定expr2的最大label值,也就能确定要表达expr2所须要的最大位数expr2_max_bit。然后把expr2放到new_expr的低位,把expr1放到new_expr的高位,然后就简化为一层switch-case了。
示比例如以下:
注意:以这种方式,并不能消除共case数。但是,逻辑和代码,可以简化。
C/C++[code] switch (expr1) { case label11: switch (expr2) { case label21: // do something break; case label22: // do something break; default: // do something break; } break; case label12: switch (expr2) { case label21: // do something break; case label22: // do something break; default: // do something break; } break; case label13: switch (expr2) { case label21: // do something break; case label22: // do something break; default: // do something break; } break; default: // do something break; }
这时能够考虑将两个嵌套的switch-case语句通过以下的方式转换为一个switch-case语句:
一般地,expr1和expr2的label情况不会太多。值也不会太大,能够先确定expr2的最大label值,也就能确定要表达expr2所须要的最大位数expr2_max_bit。然后把expr2放到new_expr的低位,把expr1放到new_expr的高位,然后就简化为一层switch-case了。
示比例如以下:
C/C++[code] new_expr = expr1 << expr2_max_bit + expr2; switch (new_expr) { case label1: // do something break; case label2: // do something break; case label3: // do something break; case label4: // do something break; case label5: // do something break; case label6: // do something break; default: // do something break; }
注意:以这种方式,并不能消除共case数。但是,逻辑和代码,可以简化。
相关文章推荐
- 【C语言提高17】字符串copy
- class专属常量
- C语言_删除字符函数
- c语言中计算int,float,double,char四种数据类型所能表示的数据范围
- c++编程必备啊..
- C语言中函数的声明、定义及使用的入门教程
- C语言学习笔记---谭浩强
- C语言的结构
- C语言编程中实现二分查找的简单入门实例
- 关于C语言程序的内存分配的入门知识学习
- C语言入门的一些基本资源推荐和程序语法概览
- c++builder PM2.5
- c语言中的__FILE__和__LINE__的作用
- C++类禁止copy构造函数和copy assign操作符
- ndk eclipse bits/c++config.h: No such file or directory
- C语言科学计算入门之矩阵乘法的相关计算
- c 内存对其
- C++ 11 Lambda表达式、auto、function、bind、final、override
- 在一个多线程系统中,主进程应该写什么?
- 【C语言提高16】数组中括号与指针关系和数组名常量指针分析