OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8104|回复: 7

c语言的条件选择效率问题

[复制链接]

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
发表于 2012-11-17 13:56:16 | 显示全部楼层 |阅读模式
第1种:
 if(dax==1)gui_draw_point_1(x0+i,y0,color);
  if(dax==2)gui_draw_point_2(x0+i,y0,color);
  if(dax==3)gui_draw_point_3(x0+i,y0,color);

第2种:
switch(dax)
  {
   case 1: 
    gui_draw_point_1(x0,y0+i,color);
    break;
   case 2: 
    gui_draw_point_2(x0,y0+i,color);
    break;
   case 3: 
    gui_draw_point_3(x0,y0+i,color);
    break;
  }
问下各位老师,哪种效率高,谢谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-17 16:08:49 | 显示全部楼层
第二种吧。你测试下,看看汇编代码。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2011-11-2
在线时间
11 小时
发表于 2012-11-17 21:56:08 | 显示全部楼层
 if(dax==1)gui_draw_point_1(x0+i,y0,color);
 else if(dax==2)gui_draw_point_2(x0+i,y0,color);
 else  if(dax==3)gui_draw_point_3(x0+i,y0,color);
就说不定了
回复 支持 反对

使用道具 举报

9

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2012-11-7
在线时间
35 小时
发表于 2012-11-18 12:55:32 | 显示全部楼层
我还是觉得switch效率会高一些吧,判别数字后直接跳转,楼上的如果dax==3的话还是得判断3次,
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2012-11-18 20:45:52 | 显示全部楼层
看编译器的优化水平
业余程序玩家。
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-5 14:25:30 | 显示全部楼层
回复【4楼】jswd:
我还是觉得switch效率会高一些吧,判别数字后直接跳转,楼上的如果dax==3的话还是得判断3次,
---------------------------------
我看了汇编,其实都是一样的
swith一样会逐个比较,相等就执行,
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2013-1-5 17:03:50 | 显示全部楼层
不要纠结这些,不值得在此浪费精力。重要的是清晰可维护。

效率问题主要看最耗费cpu的部分程序段的算法与优化。
业余程序玩家。
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2201
金钱
2201
注册时间
2012-2-8
在线时间
35 小时
发表于 2013-1-5 17:27:45 | 显示全部楼层
赞同楼上, 主要是那种写法更符合逻辑就使用哪种

网是有很多人认为 switch case 本质是就是 if else, 实为误解, C/C++标准上并没有严格规定它实现的细节, 只是规定了什么样的语句会有什么样的行为. 不同的编译器对代码的处理方式都是不同的, 好的编译器能很好的完成底层汇编代码的优化, 不需要自己去关心的.

关于 switch case, 有耐心的可以看看这个:
http://www.codeproject.com/Articles/100473/Something-You-May-Not-Know-About-the-Switch-Statem
https://github.com/roxma
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 04:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表