打印
[开发资料]

C语言while(1) 和 for ( ; ; )的区别

[复制链接]
2499|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  有读者提出了类似这样的问题:    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语句下面的一个语句。    执行过程可用下图表示:
while(1)和for(;;)异同点    这里先说一下结论,然后再验证验证结论。1.相同点    作用和效果都一样:都是实现无限循环的功能。
2.不同点    while(1):其中括号里面是一个条件,程序会判断真假。而括号里面的“1”***是一个“真值”。    其中,每一次循环,编译器都要判断常量1是不是等于零。    for(;;):这两个;;空语句,编译器一般会优化掉的,直接进入死循环。
    根据上面的描述,你可能会觉得:while(1) 比 for(;;) 要做更多事,汇编代码更多,代码量也更大。    但事实是这样吗?下面验证一下。验证while(1)和for(;;)差异    我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。1.源代码    while.c:


2.生成汇编    我们这里使用gcc编译器生成汇编,执行命令如下:

  while汇编代码:

for汇编代码:






3.png (13.71 KB )

3.png

使用特权

评论回复
板凳
小小蚂蚁举千斤| | 2023-9-22 13:19 | 只看该作者
都是C语言的基础循环指令

使用特权

评论回复
地板
zzele| | 2023-9-23 06:58 | 只看该作者
还要考虑简洁性和直观风格

使用特权

评论回复
5
szt1993| | 2023-9-26 11:37 | 只看该作者
不同代码、不同编译器,以及不同优化等级,可能最终结果有所差异。

使用特权

评论回复
6
pl202| | 2023-10-5 13:21 | 只看该作者
在C语言中,while(1)和for(;;)都是表示无限循环的常见写法,它们的作用是相同的,即在循环体内重复执行一段代码,直到遇到跳出循环的条件。

使用特权

评论回复
7
minzisc| | 2023-10-5 13:29 | 只看该作者
for(;;):for循环的初始化部分、条件部分和迭代部分都为空,因此它实际上是一个完全不带条件的无限循环。

使用特权

评论回复
8
plsbackup| | 2023-10-5 13:41 | 只看该作者
C语言中,while(1) 和 for ( ; ; ) 语句都是循环语句,但它们的使用方法和应用场景不同。

使用特权

评论回复
9
geraldbetty| | 2023-10-5 13:52 | 只看该作者
while(1)和for(;;)的效果基本相同,可以互换使用。

使用特权

评论回复
10
vivilyly| | 2023-10-6 20:40 | 只看该作者
在C语言中,while(1)和for( ; ; )都可以实现循环。它们的主要区别在于循环条件的设置和循环体的结构。

使用特权

评论回复
11
10299823| | 2023-10-6 20:52 | 只看该作者
while (1) {
    // 循环体代码
    // ...
    if (condition) {
        break;  // 跳出循环的条件
    }
}

使用特权

评论回复
12
plsbackup| | 2023-10-6 21:16 | 只看该作者
for( ; ; )
{
    // 初始化语句
    int i = 0;

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

        // 迭代语句
        i++;
    }
}

使用特权

评论回复
13
dspmana| | 2023-10-6 21:31 | 只看该作者
for( ; ; )循环的条件也是固定的,即一直循环,直到手动终止循环。但是,循环体的结构相对复杂,需要包含初始化语句、循环条件和迭代语句

使用特权

评论回复
14
saservice| | 2023-10-6 21:46 | 只看该作者
while(1) 语句是先判断条件(在这种情况下,条件总是真,因为 1 的布尔值为真),然后执行循环体。

使用特权

评论回复
15
gygp| | 2023-10-6 21:57 | 只看该作者
while(1) 语句和 for 语句都是循环语句

使用特权

评论回复
16
lzmm| | 2023-10-6 22:08 | 只看该作者
在C语言中,while(1)和for ( ; ; )都表示无限循环,即程序会在某个条件下一直运行,直到满足某个退出条件才停止。

使用特权

评论回复
17
yeates333| | 2023-10-6 22:32 | 只看该作者
选择使用哪种形式取决于个人偏好和代码风格。有些人更喜欢使用while(1),因为它更直观地表达了无限循环的意图;而有些人则更喜欢使用for(;;)

使用特权

评论回复
18
bartonalfred| | 2023-10-6 22:41 | 只看该作者
在C语言中,while(1)和for(;;)都用于创建无限循环,它们的功能和效果是相同的,都会无限地执行循环体内的代码,直到遇到break语句或者程序被手动终止。

使用特权

评论回复
19
mollylawrence| | 2023-10-8 12:19 | 只看该作者
两种循环方式都可以用来实现无限循环,但是while(1)和for(;;)在语义上有一些不同。

使用特权

评论回复
20
modesty3jonah| | 2023-10-8 12:30 | 只看该作者
while(1) 语句是一个无限循环语句,只要条件为真,就会一直执行循环体内的代码。这种语句常用于需要反复执行某个操作的情况,如循环输出某个字符、计算积分等。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

378

主题

2018

帖子

3

粉丝