6080|22

2804

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

05.26【每日一问】对于死循环,你最喜欢那种? [复制链接]

对于死循环对于我们编写裸机程序来说应该是最常见的了吧,那么我们来共同讨论一下关于死循环的问题吧。
就用C语言,不用汇编语言,说最常用的死循环语句。
一般就4种,
goto;
for( ; ; );
while(1);
do  {
} while(true);
但是我想知道这四种在编译器处理的时候有什么区别?
那个效率最高?那个效率最低?各有什么优缺点?

最新回复

  三种语句,在Keil C51里面编译出来是一样的: [attach]65543[/attach]  详情 回复 发表于 2011-6-2 08:32
点赞 关注
个人签名QQ:1625345502
 
 

回复
举报

7219

帖子

192

TA的资源

五彩晶圆(高级)

沙发
 
haha 哈哈 用的最多的是while但是不知道有什么区别 坐着听课
 
 
 

回复

134

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我看外国人的程序他们都喜欢用for(;;),也不知道为个啥。
 
 
 

回复

473

帖子

0

TA的资源

纯净的硅(高级)

4
 
goto是直接跳转,但不是说容易出错吗
for( ; ; );先赋初值,再判断条件,最后再执行
while(1);是判断再执行,由于是真所以一直循环
do  {
} while(true);先执行语言再判断条件
goto很危险容易出错,效率最高的应该是while(1);
期待高手能给我们这些新手细说下
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

5
 

这个……恐怕未必有标准答案

 

 因为效率往往由编译器优化水平决定,好的编译器会准确揣摩编程者的意图,并根据CPU指令系统的特征去生成目标码,而此时目标码的结构可能跟源码已不是一回事了。

 

 goto最好尽量避免,“结构化程序设计思想”如是说。不过那不是说效率不好,而是容易让读代码者思路混乱。

 

 其余的跟结构化编程思想不矛盾,按说可随便用,不过还是应考虑照顾读代码者。比如若循环很长,要哼哧哼哧读到最后方知 while(true) 的话未免太那个了,显然不如开门见山 while(1) 或 for( ; ; )来得爽快。反正俺是习惯写 while(1),是好是坏另当别论。

 
 
 

回复

2804

帖子

0

TA的资源

五彩晶圆(初级)

6
 

回复 5楼 仙猫 的帖子

仙猫老师果然高手,是的,这个没有标准答案的!~
个人签名QQ:1625345502
 
 
 

回复

37

帖子

18

TA的资源

一粒金砂(中级)

7
 
一般都用while(1)就完事了。。。
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

8
 
一般采用while(1),绝对不使用goto。。。。
个人签名我的博客
 
 
 

回复

2771

帖子

0

TA的资源

裸片初长成(中级)

9
 
              



                          
 
 
 

回复

1万

帖子

16

TA的资源

版主

10
 

我喜欢for

我平时用最多就是for
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 
 

回复

344

帖子

0

TA的资源

纯净的硅(初级)

11
 
我倾向于for(;;),在一些编译器里while(1) 是要有一个always true warning的,for不会产生
个人签名我们是不为一切驻留的亡魂
 
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

12
 

原帖由 ddllxxrr 于 2011-5-26 19:19 发表 我平时用最多就是for

 

我一直搞不懂,为什么for(;;)带来的结果是死循环,初值、判定、动作都为空,编译器怎么就把for(空;空;空)翻译成死循环了,顶多就跳过这条语句吧。费解。

 
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

13
 

原帖由 David_Lee 于 2011-5-26 21:09 发表   我一直搞不懂,为什么for(;;)带来的结果是死循环,初值、判定、动作都为空,编译器怎么就把for(空;空;空)翻译成死循环了,顶多就跳过这条语句吧。费解。

 

好像周立功的文档里几乎都是用for的。

 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

14
 
一般来说做嵌入式的都喜欢用for(; ;) ,说实话还真不知道为什么!
个人签名工程 = 数学+物理+经济
 
 
 

回复

2804

帖子

0

TA的资源

五彩晶圆(初级)

15
 

回复 12楼 David_Lee 的帖子

空是真的。
个人签名QQ:1625345502
 
 
 

回复

2804

帖子

0

TA的资源

五彩晶圆(初级)

16
 
其实这几个死循环的运行效率是可以忽略不计的,如果真要比较那顺序为:do{ }while(true) > for( ; ; ) >= while(1),我想虽然do {} while(true)效率较高,但是我想真正用在项目上的朋友不会很多。其实我喜欢用
for ( ; ;) 起先的时候是因为看ZLG的文档这样写,后来我又一次将此反汇编了以后,发现汇编的语句会有差别,具体的忘记了,有兴趣的坛友可以自己试一下。
个人签名QQ:1625345502
 
 
 

回复

473

帖子

0

TA的资源

纯净的硅(高级)

17
 

原帖由 wanghongyang 于 2011-5-26 22:14 发表 其实这几个死循环的运行效率是可以忽略不计的,如果真要比较那顺序为:do{ }while(true) > for( ; ; ) >= while(1),我想虽然do {} while(true)效率较高,但是我想真正用在项目上的朋友不会很多。其实我喜欢用 for ...

能不能详细解释下do{ }while(true) > for( ; ; ) >= while(1)为什么这么排,这效率怎么看

 
 
 

回复

1908

帖子

8

TA的资源

五彩晶圆(高级)

18
 
我一般采用while(1),小程序用goto 大程序 就乱了 绝对不用goto,一般都用查询方式 配合标志位
 
 
 

回复

2804

帖子

0

TA的资源

五彩晶圆(初级)

19
 

回复 18楼 sjl2001 的帖子

goto是不建议用的。
个人签名QQ:1625345502
 
 
 

回复

2804

帖子

0

TA的资源

五彩晶圆(初级)

20
 

回复 17楼 zjjone1023 的帖子

你可以对比一下这几种死循环反汇编后的汇编程序。
个人签名QQ:1625345502
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表