[讨论] 05.26【每日一问】对于死循环,你最喜欢那种?

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

QQ:1625345502

回复评论 (22)

haha 哈哈 用的最多的是while但是不知道有什么区别 坐着听课
点赞  2011-5-26 07:53
我看外国人的程序他们都喜欢用for(;;),也不知道为个啥。
点赞  2011-5-26 08:23
goto是直接跳转,但不是说容易出错吗
for( ; ; );先赋初值,再判断条件,最后再执行
while(1);是判断再执行,由于是真所以一直循环
do  {
} while(true);先执行语言再判断条件
goto很危险容易出错,效率最高的应该是while(1);
期待高手能给我们这些新手细说下
点赞  2011-5-26 08:32

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

 

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

 

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

 

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

点赞  2011-5-26 09:40

回复 5楼 仙猫 的帖子

仙猫老师果然高手,是的,这个没有标准答案的!~
QQ:1625345502
点赞  2011-5-26 10:36
一般都用while(1)就完事了。。。
点赞  2011-5-26 11:28
一般采用while(1),绝对不使用goto。。。。
我的博客
点赞  2011-5-26 13:43
              



                          
点赞  2011-5-26 14:08

我喜欢for

我平时用最多就是for
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2011-5-26 19:19
我倾向于for(;;),在一些编译器里while(1) 是要有一个always true warning的,for不会产生
我们是不为一切驻留的亡魂
点赞  2011-5-26 19:45

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

 

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

点赞  2011-5-26 21:09

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

 

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

点赞  2011-5-26 21:10
一般来说做嵌入式的都喜欢用for(; ;) ,说实话还真不知道为什么!
工程 = 数学+物理+经济
点赞  2011-5-26 21:23

回复 12楼 David_Lee 的帖子

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

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

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

点赞  2011-5-27 08:32
我一般采用while(1),小程序用goto 大程序 就乱了 绝对不用goto,一般都用查询方式 配合标志位
点赞  2011-5-27 09:17

回复 18楼 sjl2001 的帖子

goto是不建议用的。
QQ:1625345502
点赞  2011-5-27 10:22

回复 17楼 zjjone1023 的帖子

你可以对比一下这几种死循环反汇编后的汇编程序。
QQ:1625345502
点赞  2011-5-27 10:23
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复