博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
for(;;)和 while(1) 有什么区别吗?for()和while()的使用情景。
阅读量:7128 次
发布时间:2019-06-28

本文共 2230 字,大约阅读时间需要 7 分钟。

void main(void){    int a = 2 ;    // for(;;)     while(1)    {        a++;    }}
arm-linux-gcc -c -o for.o for.c;arm-linux-ld -o for_elf for.o;arm-linux-objcopy -O binary -S for_elf for.bin;arm-linux-objdump -D -m arm for_elf > for.dis;cat for.dis

 

00008460 <main>: //for(;;);

8460: e1a0c00d mov ip, sp
8464: e92dd800 stmdb sp!, {fp, ip, lr, pc}
8468: e24cb004 sub fp, ip, #4 ; 0x4
846c: eafffffe b 846c <main+0xc>

00008074 <main>://while(1);
8074: e1a0c00d mov ip, sp
8078: e92dd800 stmdb sp!, {fp, ip, lr, pc}
807c: e24cb004 sub fp, ip, #4 ; 0x4
8080: eafffffe b

没发现区别所在。

00008074 <main>://while(1){a++}
8074: e1a0c00d mov ip, sp
8078: e92dd800 stmdb sp!, {fp, ip, lr, pc}
807c: e24cb004 sub fp, ip, #4 ; 0x4
8080: e24dd004 sub sp, sp, #4 ; 0x4
8084: e3a03002 mov r3, #2 ; 0x2
8088: e50b3010 str r3, [fp, #-16]
808c: e51b3010 ldr r3, [fp, #-16]
8090: e2833001 add r3, r3, #1 ; 0x1
8094: e50b3010 str r3, [fp, #-16]
8098: eafffffb b 808c <main+0x18>

00008074 <main>://for(;;){a++}

8074: e1a0c00d mov ip, sp
8078: e92dd800 stmdb sp!, {fp, ip, lr, pc}
807c: e24cb004 sub fp, ip, #4 ; 0x4
8080: e24dd004 sub sp, sp, #4 ; 0x4
8084: e3a03002 mov r3, #2 ; 0x2
8088: e50b3010 str r3, [fp, #-16]
808c: e51b3010 ldr r3, [fp, #-16]
8090: e2833001 add r3, r3, #1 ; 0x1
8094: e50b3010 str r3, [fp, #-16]
8098: eafffffb b 808c <main+0x18>

 

 

2 为什么用for(;;)或者while(1)

详细阅读http://bbs.csdn.net/topics/80195701中下面一段话后面的内容:

《代码大全》里面说:

    在C 中,只要允许就用for 循环: C 的for 循环是这种语言强有力的结构之一。它不仅
活性强,而且把循环控制代码封装在一起,增加了其可读性。程序员在修改软件时易犯的错误
是;修改了循环前面的初始化循环的代码,但却忘了修改其后面的有关代码。在C 的for 循环
中,所有相关代码集中在循环的顶部,修改起来很容易。如果在C 中能用for 循环替代别的类
型的循环,尽量这样做。

但当while 循环更合适时,别用for 循环。

这个C 中程序虽是for循环却用了while循环的条件头:  /* read all the records from a file */for(rewind(InFile).RecCount = 0; !feof(InFile); RecCount++){fgets(InputRec[RecCount], MAX_CHARS, InFile);}     C 语言的for 循环比其它语言的for 循环优点在于,它的初始化和结束条件很灵活,而这种灵活性带来的固有缺点是把控制条件放在了循环头,因而对循环体就无法控制了。     把控制循环的语句放到for 循环头如初始化循环变量、终止循环或转向终止的表达式。上例中,fgets()语句使循环转向中止,但RecCount 语句却没起到这个作用,它是内部语句,没有起到控制循环的作用。把RecCount 语句放在循环头而把fgets()语句放在循环体中是一个错误,它使人误解为是RecCount在控制循环。
这个C 程序较好地用了while循环:      /* read all the records from a file */rewind(InFile);RecCount = 0;while(!feof(InFile)){fgets(InputRec[RecCount], MAX_CHARS, InFile);RecCount++;}

 

转载地址:http://oshel.baihongyu.com/

你可能感兴趣的文章
windows下python3虚拟环境搭建
查看>>
error at ::0 formal unbound in pointcut
查看>>
关于linux下Squid透明代理的试验
查看>>
马哥2016全新Linux+Python高端运维班第四期-第三次作业
查看>>
AngularJS基础语法
查看>>
程序编译过程
查看>>
《Linux学习并不难》归档和压缩(2):tar包的使用和管理
查看>>
cookie与session详解
查看>>
一键 安装lamp+lnmp+ftp+Tomcat任意选择5分钟起飞
查看>>
我的友情链接
查看>>
K-Backup的网络备份与集中存储介绍
查看>>
WM_CONCAT函数在11g上的变化
查看>>
Hive性能调优
查看>>
初始化oracle用户以及表空间的bash shell脚本
查看>>
CDN加速用途
查看>>
AngularJS—— 指令的复用
查看>>
FreeCMS有些功能出现乱码怎么办?
查看>>
AngularJS模块化开发实例
查看>>
python--django database grammar
查看>>
PHP内核探索:Zend虚拟机
查看>>