[开发资料] C语言while(1) 和 for ( ; ; )的区别

[复制链接]
 楼主| probedog 发表于 2023-9-22 11:24 | 显示全部楼层 |阅读模式
  有读者提出了类似这样的问题:    while(1) 和 for(;;) 它们不都是无限循环吗,作用应该一样啊,它们到底有什么区别?
    要回答这个问题,其实你各自编写一段while(1) 和 for(;;)的代码,编译对比一下代码大小和汇编文件,你就大概知道了。while(1)和for(;;)语法表达    这里先说一下while(1)和for(;;)语法表达式。1.while语法表达    其中:
  • 表达式:是循环条件
  • 语句:为循环体。
    while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。其执行过程可用下图表示:2.for语法表达
 楼主| probedog 发表于 2023-9-22 11:34 | 显示全部楼层
它的执行过程如下:1.先求解表达式12.求解表达式2若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;
若其值为假(0),则结束循环,转到第5)步。
3.求解表达式34.转回上面第2)步继续执行。5.循环结束,执行for语句下面的一个语句。    执行过程可用下图表示: 1.png
while(1)和for(;;)异同点    这里先说一下结论,然后再验证验证结论。1.相同点    作用和效果都一样:都是实现无限循环的功能。
2.不同点    while(1):其中括号里面是一个条件,程序会判断真假。而括号里面的“1”***是一个“真值”。    其中,每一次循环,编译器都要判断常量1是不是等于零。    for(;;):这两个;;空语句,编译器一般会优化掉的,直接进入死循环。
    根据上面的描述,你可能会觉得:while(1) 比 for(;;) 要做更多事,汇编代码更多,代码量也更大。    但事实是这样吗?下面验证一下。验证while(1)和for(;;)差异    我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。1.源代码    while.c:

2.png
2.生成汇编    我们这里使用gcc编译器生成汇编,执行命令如下:
4.png
  while汇编代码:
5.png
for汇编代码:
6.png





3.png
小小蚂蚁举千斤 发表于 2023-9-22 13:19 | 显示全部楼层
都是C语言的基础循环指令
zzele 发表于 2023-9-23 06:58 | 显示全部楼层
还要考虑简洁性和直观风格
szt1993 发表于 2023-9-26 11:37 | 显示全部楼层
不同代码、不同编译器,以及不同优化等级,可能最终结果有所差异。
pl202 发表于 2023-10-5 13:21 | 显示全部楼层
在C语言中,while(1)和for(;;)都是表示无限循环的常见写法,它们的作用是相同的,即在循环体内重复执行一段代码,直到遇到跳出循环的条件。
minzisc 发表于 2023-10-5 13:29 | 显示全部楼层
for(;;):for循环的初始化部分、条件部分和迭代部分都为空,因此它实际上是一个完全不带条件的无限循环。
plsbackup 发表于 2023-10-5 13:41 | 显示全部楼层
C语言中,while(1) 和 for ( ; ; ) 语句都是循环语句,但它们的使用方法和应用场景不同。
geraldbetty 发表于 2023-10-5 13:52 | 显示全部楼层
while(1)和for(;;)的效果基本相同,可以互换使用。
vivilyly 发表于 2023-10-6 20:40 | 显示全部楼层
在C语言中,while(1)和for( ; ; )都可以实现循环。它们的主要区别在于循环条件的设置和循环体的结构。
10299823 发表于 2023-10-6 20:52 | 显示全部楼层
while (1) {
    // 循环体代码
    // ...
    if (condition) {
        break;  // 跳出循环的条件
    }
}
plsbackup 发表于 2023-10-6 21:16 | 显示全部楼层
for( ; ; )
{
    // 初始化语句
    int i = 0;

    // 循环条件
    while(i < 10)
    {
        // 循环体语句
        printf("%d\n", i);

        // 迭代语句
        i++;
    }
}
dspmana 发表于 2023-10-6 21:31 | 显示全部楼层
for( ; ; )循环的条件也是固定的,即一直循环,直到手动终止循环。但是,循环体的结构相对复杂,需要包含初始化语句、循环条件和迭代语句
saservice 发表于 2023-10-6 21:46 | 显示全部楼层
while(1) 语句是先判断条件(在这种情况下,条件总是真,因为 1 的布尔值为真),然后执行循环体。
gygp 发表于 2023-10-6 21:57 | 显示全部楼层
while(1) 语句和 for 语句都是循环语句
lzmm 发表于 2023-10-6 22:08 | 显示全部楼层
在C语言中,while(1)和for ( ; ; )都表示无限循环,即程序会在某个条件下一直运行,直到满足某个退出条件才停止。
yeates333 发表于 2023-10-6 22:32 | 显示全部楼层
选择使用哪种形式取决于个人偏好和代码风格。有些人更喜欢使用while(1),因为它更直观地表达了无限循环的意图;而有些人则更喜欢使用for(;;)
bartonalfred 发表于 2023-10-6 22:41 | 显示全部楼层
在C语言中,while(1)和for(;;)都用于创建无限循环,它们的功能和效果是相同的,都会无限地执行循环体内的代码,直到遇到break语句或者程序被手动终止。
mollylawrence 发表于 2023-10-8 12:19 | 显示全部楼层
两种循环方式都可以用来实现无限循环,但是while(1)和for(;;)在语义上有一些不同。
modesty3jonah 发表于 2023-10-8 12:30 | 显示全部楼层
while(1) 语句是一个无限循环语句,只要条件为真,就会一直执行循环体内的代码。这种语句常用于需要反复执行某个操作的情况,如循环输出某个字符、计算积分等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

486

主题

3268

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部

486

主题

3268

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部