c语言switch顺序,switch-case的执行顺序,该怎么处理
当前位置:我的异常网» C语言 » switch-case的执行顺序,该怎么处理
switch-case的执行顺序,该怎么处理
www.myexceptions.net 网友分享于:2013-03-17 浏览:7次
switch--case的执行顺序
有 这么一段程序
请问case如何判断执行到Type?
switch(Type)
{
case 2x2:
case 3x3:
case 4x4:
case 5x5:
EnterType = Type;//是怎么判断执行到EnterType = Type?
break;
default:
EnterType = 2x2;
}
------解决方案--------------------
标 题: 更深入一点理解switch语句及c/c++对const的处理
发信站: BBS 水木清华站 (Thu Feb 24 20:58:16 2005), 站内
更深入一点理解 switch 语句 及 c/c++ 对 const 的处理
谢煜波
前段时间在论坛上看见台湾李维在 < > 一书中对windows编程模式中,消息处理部分有如下的一些分析:
他说,在消息处理循环中,一般的形式是这样的
MSG msg ;
switch( msg ){
case WM_XXXXXXX :
....
case WM_XXXXXXX :
....
case WM_XXXXXXX :
....
} ;
李维说,这种模式是很低效的,因应经过汇编后,这种C代码会产生如下的汇编代码
cmp .... .....
jnz .... .....
cmp .... .....
jnz .... .....
cmp .... .....
jnz .... .....
如果你的 case 足够多,比如,你有一万条消息需要处理,而不幸的是你把一条最常用的消息
放在了最后一位,那么当这条消息要得到处理,会首先经过一万次的cmp与jnz, 李维认为,这
是非常非常低效的,实在是低效的忍无可忍,无需再忍~~:P
在起初,我也是这样认为的,但近来的阅读及实验却发现,这种看法非常片面,今天就来谈谈这个问题( 所有实验在 linux 平台下完成 )
首先看一到用 c 编写的程序
/* -------------------- filename : ta.c --------------- */
int switch_test_first( int x )
{
int res ;
switch( x ){
case 100 :
res = 1 ;
break ;
case 102 :
res = 2 ;
break ;
case 103 :
res = 3 ;
break ;
}
return res ;
}
然后,我们用 gcc 将它编译成汇编文件( 使用 -S 开关 )
gcc -S ta.c
将得到如下的汇编文件( ta.s )
.file "ta.c "
.text
.globl switch_test_first
.type switch_test_first,@function
switch_test_first:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl 8(%ebp), %eax
.file "ta.c "
.text
.globl switch_test_first
.type switch_test_first,@function
switch_test_first:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl 8(%ebp), %eax
movl %eax, -8(%ebp)
cmpl $102, -8(%ebp) // 1
je .L4 // 2
cmpl $102, -8(%ebp) // 3
jg .L8 // 4
cmpl $100, -8(%ebp) // 5
je .L3 // 6
jmp .L2 // 7
.L8:
cmpl $103, -8(%ebp)
je .L5
文章评论
c语言switch顺序,switch-case的执行顺序,该怎么处理相关推荐
- 关于SWITCH中CASE的执行顺序。
关于SWITCH中CASE的执行顺序其实是一个挺有意思的小问题,带不带break,或者break放置在哪里都会对最终结果产生影响,其实判断最终结果只要找到入口点和最近的一个break就行,然后入口点和 ...
- case的执行顺序 嵌套使用
我们先来看一下表中数据的情况: select * from PRODUCTINFO PRODUCTID PRODUCTNAME PRODUCTPRICE QUANTITY CATEGORY DESPE ...
- TestNG-详解preserve-order的作用与测试case的执行顺序
在TestNG xml配置文件中,关于<test>的配置里面,有一个属性叫preserve-order,一开始以为这个属性可以用来控制测试case(那些被@Test注解标注的方法)的执行顺 ...
- mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序
(8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING ...
- mysql 查询if语句执行顺序_MySQL 语句的执行顺序
(1)SQL语句的语法顺序: SELECT[DISTINCT] FROM JOIN ON WHERE GROUP BY HAVING UNION ORDER BY LIMIT (2)SQL的执行顺序 ...
- java 类的执行顺序_Java中类的执行顺序
讲解在代码中: package 类执行顺序; /** * java类执行顺序 * * 1.如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块 * 2.如果类有静态成员赋值或者静态初 ...
- java 执行顺序混乱_java类执行顺序问题
经常遇到的面试题,一个类继承另一个类然后问输出的结果是什么.个人觉得就是考类的输出问题(亲测) 第一:单一的类执行顺序 package Test; public class person { stat ...
- java代码块执行顺序_JAVA代码块执行顺序分析测试
在实际的工作过程中,几乎从没用过JAVA的代码块.不过既然做了这方面的学习与测试,就索性记录下来防止忘记.同一个招式,圣斗士是不会学习第二遍的... 首先,上代码: public class Code ...
- java 拦截器顺序_Springmvc拦截器执行顺序及各方法作用详解
实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInt ...
- mysql sql 子查询 执行顺序_MySQL,SQL语句执行顺序
1.SQL执行顺序: select 考生姓名, max(总成绩) asmax总成绩fromtb_Gradewhere 考生姓名 is not null group by考生姓名having max(总 ...
最新文章
- Android第二十期 - 微信的主体构架
- python开发专属表情包_Python开发个人专属表情包网站
- Java千百问_03基本的语法(005)_二进制是如何做位运算的
- boost::math::daubechies_wavelet用法的测试程序
- python参数默认值实例_Python中使用partial改变方法默认参数实例
- Hadoop HIVE 创建表
- python 执行js_Python爬虫之记录一次下载验证码的尝试
- 同一机器部署多个JVM
- centos8安装mysql_Linux宝塔面板安装
- C++开发需要掌握哪些技能?
- java实现红包要多少钱_Java实现抢红包功能
- BASLER巴斯勒线扫相机使用流程
- c语言字符串内容匹配,C语言字符串匹配函数
- csdn 修改博客皮肤
- python 逐行调试工具_常用的 Python 调试工具,Python开发必读-乾颐堂
- 热塑性塑料/热塑性橡胶
- excel删除无尽空白行_?Excel你不知道的神技巧:提升工作效率必备,值得老师收藏!...
- mathtype向上取整函数
- 高考631能上什么好的计算机学校,2021年高考631分左右能上什么大学(100所)
- Apk脱壳圣战之---如何脱掉 梆梆加固 的保护壳
热门文章
- How to Install Cinnamon Desktop on Ubuntu
- 计算机英语课件模版,小学英语三年级下学期教学课件大纲模板
- Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included
- 管理客户信息并非易事
- 《心流:最优体验心理学》读书笔记
- 如何对固定资产、耗材全流程管理
- 【Unity脚本】鼠标常用点击事件
- 乡村爱情里的赵四;逗的大家笑尿裤子了
- react中使用AlipayJSBridge 支付宝支付调用接口在H5网页的应用
- 忍者必须死代码 免费