当前位置:我的异常网» 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的执行顺序,该怎么处理相关推荐

  1. 关于SWITCH中CASE的执行顺序。

    关于SWITCH中CASE的执行顺序其实是一个挺有意思的小问题,带不带break,或者break放置在哪里都会对最终结果产生影响,其实判断最终结果只要找到入口点和最近的一个break就行,然后入口点和 ...

  2. case的执行顺序 嵌套使用

    我们先来看一下表中数据的情况: select * from PRODUCTINFO PRODUCTID PRODUCTNAME PRODUCTPRICE QUANTITY CATEGORY DESPE ...

  3. TestNG-详解preserve-order的作用与测试case的执行顺序

    在TestNG xml配置文件中,关于<test>的配置里面,有一个属性叫preserve-order,一开始以为这个属性可以用来控制测试case(那些被@Test注解标注的方法)的执行顺 ...

  4. mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序

    (8)     DISTINCT (1)     FROM (3)      JOIN (2)     ON (4)     WHERE (5)     GROUP BY (6)     HAVING ...

  5. mysql 查询if语句执行顺序_MySQL 语句的执行顺序

    (1)SQL语句的语法顺序: SELECT[DISTINCT] FROM JOIN ON WHERE GROUP BY HAVING UNION ORDER BY LIMIT (2)SQL的执行顺序 ...

  6. java 类的执行顺序_Java中类的执行顺序

    讲解在代码中: package 类执行顺序; /** * java类执行顺序 * * 1.如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块 * 2.如果类有静态成员赋值或者静态初 ...

  7. java 执行顺序混乱_java类执行顺序问题

    经常遇到的面试题,一个类继承另一个类然后问输出的结果是什么.个人觉得就是考类的输出问题(亲测) 第一:单一的类执行顺序 package Test; public class person { stat ...

  8. java代码块执行顺序_JAVA代码块执行顺序分析测试

    在实际的工作过程中,几乎从没用过JAVA的代码块.不过既然做了这方面的学习与测试,就索性记录下来防止忘记.同一个招式,圣斗士是不会学习第二遍的... 首先,上代码: public class Code ...

  9. java 拦截器顺序_Springmvc拦截器执行顺序及各方法作用详解

    实现HandlerInterceptor接口或者继承HandlerInterceptor的子类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInt ...

  10. mysql sql 子查询 执行顺序_MySQL,SQL语句执行顺序

    1.SQL执行顺序: select 考生姓名, max(总成绩) asmax总成绩fromtb_Gradewhere 考生姓名 is not null group by考生姓名having max(总 ...

最新文章

  1. Android第二十期 - 微信的主体构架
  2. python开发专属表情包_Python开发个人专属表情包网站
  3. Java千百问_03基本的语法(005)_二进制是如何做位运算的
  4. boost::math::daubechies_wavelet用法的测试程序
  5. python参数默认值实例_Python中使用partial改变方法默认参数实例
  6. Hadoop HIVE 创建表
  7. python 执行js_Python爬虫之记录一次下载验证码的尝试
  8. 同一机器部署多个JVM
  9. centos8安装mysql_Linux宝塔面板安装
  10. C++开发需要掌握哪些技能?
  11. java实现红包要多少钱_Java实现抢红包功能
  12. BASLER巴斯勒线扫相机使用流程
  13. c语言字符串内容匹配,C语言字符串匹配函数
  14. csdn 修改博客皮肤
  15. python 逐行调试工具_常用的 Python 调试工具,Python开发必读-乾颐堂
  16. 热塑性塑料/热塑性橡胶
  17. excel删除无尽空白行_?Excel你不知道的神技巧:提升工作效率必备,值得老师收藏!...
  18. mathtype向上取整函数
  19. 高考631能上什么好的计算机学校,2021年高考631分左右能上什么大学(100所)
  20. Apk脱壳圣战之---如何脱掉 梆梆加固 的保护壳

热门文章

  1. How to Install Cinnamon Desktop on Ubuntu
  2. 计算机英语课件模版,小学英语三年级下学期教学课件大纲模板
  3. Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included
  4. 管理客户信息并非易事
  5. 《心流:最优体验心理学》读书笔记
  6. 如何对固定资产、耗材全流程管理
  7. 【Unity脚本】鼠标常用点击事件
  8. 乡村爱情里的赵四;逗的大家笑尿裤子了
  9. react中使用AlipayJSBridge 支付宝支付调用接口在H5网页的应用
  10. 忍者必须死代码 免费