1 for(;;)和 while(1) 有什么区别吗?

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++;
}

转载于:https://www.cnblogs.com/mylinux/p/3978591.html

for(;;)和 while(1) 有什么区别吗?for()和while()的使用情景。相关推荐

  1. 思维课和少儿编程的区别

    思维课和少儿编程的区别?家长们在给孩子选择一些能够提升孩子能力的课程的时候,可以说是十分的用心.就拿现在很多的家长想要孩子去学习少儿编程的课程来说,他们对于思维课和少儿编程的区别并不是很清楚,今天我们 ...

  2. 美国商务部发布软件物料清单 (SBOM) 的最小元素(下)

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...

  3. 盛大游戏技术总监徐峥:Unity引擎使用的三种方式

    在5月13日Unite 2017 案例分享专场上,盛大游戏技术总监徐峥分享了使用Unity引擎的三种方式,以下为详细内容: 大家好,我先简单介绍一下我自己,我是盛大游戏的技术总监徐峥.我今天想分享的主 ...

  4. 网安面试题汇总--持续记录

    介绍:我是一名保安,保卫一方平安,深爱业主小丹,喜欢小熊饼干. 笔者回尝试回答一下面试题并记录,欢迎大佬写下高见. 如下网安面试题,如有侵权,联系笔者删除. 渗透测试(红队攻防) 代码审计 安全研究 ...

  5. 风控基础指标之决策树的特征选择

    摘要:目前主要的决策树算法有ID3.C4.5和CART,在各种不同的软件选择使用决策数时,也有分裂依据的指标选择,主要包括熵(Entropy).基尼不纯度(Gini impurity)和分类误差率(M ...

  6. 小学计算机集体听课评课,各科听课评课稿

    各科听课评课稿 篇一:听评课稿 二年级的教学重点是识字.写字教学,同时结合上下文和生活实际了解课文中词句的意思,,在阅读中积累词语也是重要的教学内容和目标.郭丽娜老师执教的这一课符合课程标准,符合教学 ...

  7. 离开谷歌的李飞飞没闲着,通过机器学习研究抑郁症!

    本文作者Albert Haque, Michelle Guo, Adam S Miner和Li Fei-Fei.文章主要介绍了李飞飞团队的最新研究成果:一种基于机器学习的抑郁症症状严重程度测量方法,该 ...

  8. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  9. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  10. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

最新文章

  1. PNG 图片压缩原理的两个关键点!
  2. 专业网络推广浅析单页面网站如何高效做SEO优化?
  3. python可以在线编程吗-有哪些 python 的在线练习题或编程挑战的网站?
  4. 多分类问题中混淆矩阵(Confusion Matrix)的Matlab画法
  5. 列表界面脚本脚本控制精度_AE脚本编辑
  6. 让你30分钟快速掌握vue 3
  7. md5修改工具_【q001】如何校验文件的MD5
  8. php 调试环境配置
  9. springCloud教程链接
  10. 中科院信工所经验_2018信工所五室经验贴 - 中国科学院 - 王道论坛,专注于计算机考研的点点滴滴! - Powered by Discuz!...
  11. 用几何画板演示高尔顿钉板动画
  12. SendGrid -- Stressful Subject
  13. Kali 开机启动慢解决方案(用时56秒)
  14. yarn 出现error An unexpected error occurred错误的解决办法
  15. Docker容器支持中文并添加中文字体
  16. runtime 黑魔法
  17. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)
  18. 1,objective-c语言的主要优点和缺陷,objective_C 优缺点
  19. 【GAMES101】作业6(提高)含BVH与SAH加速查找算法(SVH)和快速排序算法
  20. 《洞悉敏捷》黄喆:谈谈不同敏捷方法背后的核心精神

热门文章

  1. 如何从单个服务器扩展到百万用户的系统?
  2. Linux信号处理函数可中断么,linux中关于信号处理笔记(一)
  3. headerIP php_PHP使用curl伪造IP地址和header信息
  4. excel打印预览在哪里_Excel如何打印表格,每页纸都有标题?
  5. 算法训练 字符串的展开
  6. 深入理解Spark 2.1 Core (二):DAG调度器的原理与源码分析
  7. SpringCloud实现原理图
  8. 红黑树、B(+)树、跳表、AVL对比
  9. ElasticSearch 实践过程中遇到的几个小问题
  10. jvm监控jstatd使用