【问题标题】:What does "for(;;)" mean?“for(;;)”是什么意思?
【发布时间】:2011-06-21 02:47:00
【问题描述】:

在 C/C++ 中,以下是什么意思?

for(;;){
    ...
}

【问题讨论】:

  • 永远孤独的循环。
  • 另见 stackoverflow.com/questions/4031636/… 和 stackoverflow.com/questions/2737550/what-does-for-mean-in-perl/… - 我没有把它们算作骗子,因为它们是 PHP/Perl,但如果之前没有被问过,我会感到惊讶。但是,因为我找不到 C 的,所以你现在很安全 :-)
  • 我不认为我会是第一个问的人,但我在问之前尝试了搜索。没有要搜索的关键字,我承认,我有点懒。
  • 没问题,我们喜欢这类问题!这是回答按钮的竞赛​​span>
  • 我建议 for(;"ever";) { code }

标签: c++ c syntax for-loop


【解决方案1】:

这是一个无限循环,相当于while(true)。不提供终止条件时,条件默认为true。

【讨论】:

  • 之所以写for(;;)而不是while(true)是因为一些编译器会对while(true)中的常量布尔表达式发出警告。例如,Visual C++ 用while(true) 给我一个“警告C4127:条件表达式是常量”。
  • 但在功能上完全一样。
  • @In silico:如果你喜欢打高尔夫球的话,它也短了四个字符。
  • 我相信另一个原因是有些人认为它更具可读性。
  • Morgan:在 Visual C++ 编译器方面,Stack Overflow question 与 for(;;) 和 while(true) 相关。
【解决方案2】:

在 C 和 C++(以及许多其他语言)中,for 循环包含三个部分:

  • 预循环部分,在循环开始之前执行;
  • 一个迭代条件部分,当它为真时,将执行循环体;和
  • 循环体每次迭代后执行的后迭代部分。

例如:

for (i = 1, accum = 0; i <= 10; i++)
    accum += i;

将从 1 到 10 的数字相加。

大致相当于如下:

i = 1;
accum = 0;
while (i <= 10) {
    accum += i;
    i++;
}

但是,没有什么要求for 语句中的部分实际上包含任何内容,如果迭代条件缺失,则假定它为真。

所以for(;;) 循环基本上只是意味着:

  • 不要进行任何循环设置;
  • 永远循环(尽管有中断、返回等);和
  • 不要进行任何迭代后处理。

换句话说,这是一个无限循环。

【讨论】:

    【解决方案3】:

    循环直到循环内的某些break、exit、throw 等语句执行。基本上,您可以将for 循环视为由:

    for (setup; test; advance)
        ...
    

    如果“测试”为空,则认为是true,循环继续运行。空的“setup”和“advance”根本什么都不做。

    【讨论】:

      【解决方案4】:

      一个无限循环,一直持续到出现break、exit 或goto 语句。

      【讨论】:

        【解决方案5】:

        即使this answer 暗示这两种结构是等价的,C 语言中的for(;;) 和while(1)(它们都创建无限循环)之间存在细微差别(并且可能依赖于编译器)。

        一些编译器(例如 Windriver DIABData)在使用 while(1) 时会抱怨“条件始终为真”。

        更改为for(;;) 可以消除警告,可能是因为后一个表达式在语义上更强,可以故意创建无限循环,并且根本不存在“始终为真”的条件(而且写起来更短) .

        另一方面,正如 Adrian 在 cmets 中所说,C++ 语言对这两种结构都没有影响:

        C++ 标准规定,缺少条件使隐含的 while 子句等同于 while(true) 和 for ( for-init-statement condition opt ; expression opt ) 语句等同于 { for-init-statement while ( condition ) { statement expression ; } }

        【讨论】:

        • 在 C++ 语言标准中,[stmt.for] 部分明确指出 缺少条件使隐含 while 子句等同于 while(true) 和 for ( for-init-statement condition opt ; expression opt ) statement 等价于 { for-init-statement while ( condition ) { statement expression ; } }。总之,我们有for(;;) 等价于while(true)。既然你写了while(1),这可能只适用于C,而不是C++?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-26
        • 2023-01-11
        • 2017-08-11
        • 2011-01-03
        • 1970-01-01
        • 2016-07-11
        • 1970-01-01
        相关资源
        最近更新 更多