C语言中while(1)与for(;;)的差异解析
ARM与嵌入式 2024-05-27
有读者提出了类似这样的问题: while(1) 和 for(;;) 它们不都是无限循环吗,作用应该一样啊,它们到底有什么区别?
要回答这个问题,其实你各自编写一段while(1) 和 for(;;)的代码,编译对比一下代码大小和汇编文件,你就大概知道了。while(1)和for(;;)语法表达 这里先说一下while(1)和for(;;)语法表达式。1.while语法表达 其中:
  • 表达式:是循环条件
  • 语句:为循环体。
while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。其执行过程可用下图表示:2.for语法表达 它的执行过程如下: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: for.c:2.生成汇编 我们这里使用gcc编译器生成汇编,执行命令如下: while汇编代码: for汇编代码:
你会发现,除了文件名不同,其余都相同。 当然,这里额外说一下,不同代码、不同编译器,以及不同优化等级,可能最终结果有所差异。


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • C语言
  • 编程
  • 软件开发
  • 程序
  • 单片机和芯片有何不同之处?

    单片机是电子专业的朋友都接触过的设备,可以说单片机是新手、老手都会玩的利器。为增进大家对单片机的认识,本文将对单片机和芯片的区别以及单片机的执行速度予以介绍。如果你对单片机具有兴趣,不妨继续往下阅读...

    30分钟前
  • df命令在 Linux 下11种不同的实例

    df 即可用磁盘(disk free),用于显示文件系统的磁盘使用情况。默认情况下 df 命令将以每块 1K 的单位进行显示所有当前已挂载的文件系统,如果你想以人类易读的格式显示 df 命令的输出,像这样df -h使用 -h 选项。 ... 评论:8 分享:0 收藏:9      2015-10-26 07:56      Pradeep Kumar, strugglingyouth

    55分钟前
  • 不常见的Linux 管理工具

    引言 在本教程中,我已经收集了10个给 Linux 用户的有用工具,其中包括各种网络监控,系统审计和一些其它实用的命令,它可以帮助用户提高工作效率。我希望你会喜欢他们。 1. w 显示谁登录了系统并执行了哪些程序。 $ ... 评论:8 分享:0 收藏:11      2015-10-26 08:26      Rajneesh Upadhyay, strugglingyouth

    55分钟前
  • 10年大神,传授嵌入式开发心得

    十年经验的大神谈如何学STM32嵌入式开发

    昨天
  • C 语言中数据类型的解释

    在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间。

    06-14
  • 编程七大数据结构的奥秘

    在编程的世界里,数据结构是构建信息框架的骨架。就像现实生活中的建筑需要精心设计的结构一样,我们的数据也需要合适的结构来保证程序的高效和稳定。

    06-14
  • C 程序中可用的4个存储类

    存储类定义C语言程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。

    06-14
  • 程序内存分区中的堆与栈

    堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不

    06-14
  • 驱动系统的定义:解析动力传输的核心概念

    驱动程序本质上是软件代码,主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。如果一个硬件设备没有驱动程序,只有操作系统是不能发挥特有功能的,也就是...

    06-13
下载排行榜
更多
评测报告
更多
EE直播间
更多
广告