单片机代码中while(1) 和 for()有什么区别_第1页
单片机代码中while(1) 和 for()有什么区别_第2页
单片机代码中while(1) 和 for()有什么区别_第3页
单片机代码中while(1) 和 for()有什么区别_第4页
单片机代码中while(1) 和 for()有什么区别_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

有读者好奇:有的代码是用while(1),而有的是for(;;),while(1)和for(;;)它们不都是无限循环吗,作用应该一样啊,它们到底有什么区别?要回答这个问题,其实你各自编写一段while(1)和for(;;)的代码,编译对比一下代码大小和汇编文件,你就大概知道了。while(1)和for(;;)语法表达这里先说一下while(1)和for(;;)语法表达式。1.while语法表达while(表达式){语句}其中:表达式:是循环条件语句:为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。其执行过程可用下图表示:2.for语法表达for(表达式1;表达式2;表达式3){语句}它的执行过程如下:1.先求解表达式12.求解表达式2若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。3.求解表达式34.转回上面第2)步继续执行。5.循环结束,执行for语句下面的一个语句。执行过程可用下图表示:while(1)和for(;;)异同点这里先说一下结论,然后再验证验证结论。1.相同点作用和效果都一样:都是实现无限循环的功能。2.不同点while(1):其中括号里面是一个条件,程序会判断真假。而括号里面的“1”永远是一个“真值”。其中,每一次循环,编译器都要判断常量1是不是等于零。for(;;):这两个;;空语句,编译器一般会优化掉的,直接进入死循环。根据上面的描述,你可能会觉得:while(1)比for(;;)要做更多事,汇编代码更多,代码量也更大。但事实是这样吗?下面验证一下。验证while(1)和for(;;)差异我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。1.源代码while.c://filename:while.cintmain(intargc,charconst*argv[]){while(1){}return0;}for.c://filename:for.cintmain(intargc,charconst*argv[]){for(;;){}return0;}2.生成汇编我们这里使用gcc编译器生成汇编,执行命令如下:gcc-S-owhile.swhile.cgcc-S-ofor.sfor.cwhile汇编代码:;filename:whiles.file"while.c".text.globlmain.typemain,@functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset16.cfi_offset6,-16movq%rsp,%rbp.cfi_def_cfa_register6movl%edi,-4(%rbp)movq%rsi,-16(%rbp).L2:jmp.L2.cfi_endproc.LFE0:.sizemain,.-main.ident"GCC:(GNU)9.3.0".section.note.GNU-stack,"",@progbitsfor汇编代码:;filename:for.s.file"for.c".text.globlmain.typemain,@functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset16.cfi_offset6,-16movq%rsp,%rbp.cfi_def_cfa_register6movl%edi,-4(%rbp)movq%rsi,-16(%rbp).L2:jmp.L2.cfi_endproc.LFE0:.sizemain,.-main.ident"GCC:(GNU)9.3.0".sect

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论