switch语句在一定程度上是有动态跳转(函数指针就是一种动态跳转),另外switch语句绝对不是和if... else if ... else if等效的
switch语句有两种实现:
一、table switch
switch (key) {
case 2:
...;
case 3:
...;
case 5:
...;
case 6:
...;
}
这种语句会得到类似这样的效果:在代码中有对应2到6五个key值的语句起点——就是说包括并没有出现的4。可以这样看,5个起点被存储在一个数组中,可以直接用key - 2作为下标获得需要执行的语句位置。
二、lookup switch
switch (key) {
case 5:
...;
case 100:
...;
case 23:
...;
case 1:
...;
}
对于这种情况,table switch就会很浪费,因为需要整整100个项,而真正用到的key值只有四个。这个时候编译出的代码将只有4个项,分别对应1 5 23 100,是的被排序了。至于为什么排序,不作解释,该明白的人应该已经明白了。
switch语句也有弊端,因为生成的bytecode远比用一串if else大。同时由于需要更长的初始化时间,在项目比较少的时候可能会比if else还慢。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xueyong1203/archive/2006/07/16/928571.aspx
分享到:
相关推荐
该项目是一款基于freeRTOS操作系统和STM32F103x微控制器的手机远程控制浴室温度系统设计源码,共包含1087个文件,包括580个C语言源文件、269个头文件、45个汇编源文件、36个数据文件、36个目标文件、35个编译规则文件、28个包含文件、27个文本文件、6个源文件、3个归档文件。此系统通过手机远程实现对浴室温度的有效控制,适用于智能浴室环境管理。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。