【问题标题】:Whats the meaning of "for(;;)"“for(;;)”是什么意思
【发布时间】:2016-02-18 12:37:01
【问题描述】:

Moin, 我刚刚在一些源代码中发现了一个 for 循环。

for (;;) {
    // some work
    if (condition) {
       break;
    }
}

for (;;) 是如何工作的?

【问题讨论】:

  • 直到永恒,除非神住在里面
  • 你的初学者 C 级书在你那里查的时候是怎么说的?
  • for 语句的三个组成部分中的任何一个或全部都可以留空。如果全部为空白,则没有初始化,没有退出测试,也没有增量部分。行为紧随其后。

标签: c for-loop syntax


【解决方案1】:

这个for(;;) 是一个无限循环。

根据C11,第 §6.8.5.3 章,for 声明

声明
for ( clause-1 ; expression-2 ; expression-3 ) 声明
行为如下:表达式 expression-2 是控制表达式 在每次执行循环体之前进行评估。[...]

和(强调我的

clause-1expression-3 都可以省略。 省略的 expression-2 被替换为 非零常数。

另外,对于控制表达式的使用

一个迭代语句导致一个称为循环体的语句被重复执行 直到 控制表达式 比较等于 0。[...]

所以,如果三个都被删除,控制表达式被认为是非零的,它永远为真,因此本质上使它成为一个无限循环。

【讨论】:

  • 这是一个很好的正式答案,尽管本着这种精神我认为你应该提到无操作无限循环是 UB。
  • @Bathsheba 不,这不是 UB。请参阅 §6.8.5/6 和脚注 157。
【解决方案2】:

这是一个无限循环,就像

while (1)

这主要是因为一些编译器在使用 while(1) 检测到无限循环时会抱怨。

for 的三个部分是可选的,所以如果缺少初始化部分,则没有初始化,如果缺少测试部分,则假设为 true,等等。

【讨论】:

  • 谢谢,我会在短时间内接受您的答复。我知道有;; c中的空表达式/语句,但我认为如果没有,测试部分将评估为假......
【解决方案3】:
for (;;) {
    // some work
    if (condition) {
       break;
    }
}

等价于

do
{
  //some work
}while(!condition);

【讨论】:

    【解决方案4】:

    将此读作“永远”。 它重复该块直到满足条件,并执行break语句。

    【讨论】:

      【解决方案5】:

      这是一个无限循环。 这意味着循环将一直执行,直到您使用 break 或 exit 函数。

      【讨论】:

      • return 声明。
      • ..或转到...。 (对不起:)
      猜你喜欢
      • 2011-06-21
      • 1970-01-01
      • 2013-09-26
      • 2023-01-11
      • 2017-08-11
      • 2011-01-03
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      相关资源
      最近更新 更多