代码之家  ›  专栏  ›  技术社区  ›  Sydius

对于(;true;)与while(true)不同?

c c++
  •  10
  • Sydius  · 技术社区  · 16 年前

    如果我的理解是正确的,他们会做完全相同的事情。为什么会有人使用“for”变体?只是味道吗?

    编辑: 我想我也在为(;)考虑。

    8 回复  |  直到 16 年前
        1
  •  40
  •   Stefan    16 年前
    for (;;)
    

    通常用于防止编译器警告:

    while(1)
    

    while(true)
    

    通常会抛出一个编译器关于条件表达式为常量的警告(至少在最高警告级别)。

        2
  •  8
  •   Oren Shemesh    16 年前

    是的,只是味道而已。

        3
  •  6
  •   mipadi    16 年前

    我从来没见过 for (;true;) . 我 看到 for (;;) 唯一的区别似乎是味道。我发现C程序员稍微喜欢 对于(;;) 结束 while (1) ,但这仍然只是偏好。

        4
  •  4
  •   Bill K    16 年前

    不是答案,而是一个注释:有时记住for(;x;)与while(x)相同(换句话说,在我检查if条件的中心表达式时只说“while”)有助于我分析语句。。。
    例如,很明显,中心表达式总是在循环的第一个过程开始时求值,这一点您可能会忘记,但当您以while()格式查看它时,它是完全明确的。

    有时候,记住这一点也很方便

    a;
    while(b) {
       ...
       c;
    }
    

    for(a;b;c) {
        ...
    }
    

    我知道这是显而易见的,但积极地意识到这种关系确实有助于您在一种形式和另一种形式之间快速转换,以澄清混乱的代码。

        5
  •  3
  •   Rob Walker    16 年前

    一些编译器(一直向上发出警告)会抱怨 while(true) 是一个永远不会失败的条件语句,而他们对 for (;;)

    出于这个原因,我更喜欢使用 就像无限循环的习惯用法一样,但不要认为这有什么大不了的。

        6
  •  1
  •   Yes - that Jake.    16 年前

        7
  •  0
  •   Arcane    16 年前

    优化编译器应该为它们生成相同的程序集——一个无限循环。

        8
  •  0
  •   Matthew    16 年前

    编译器警告已经讨论过了,所以我将从语义的角度来讨论它。我使用while(TRUE)而不是for(;;),因为在我看来,while(TRUE)听起来比for(;;)更有意义。我把while(TRUE)读作“while TRUE总是TRUE”。就个人而言,这是代码可读性的改进。

    因此,宙斯禁止我不记录我的代码(当然,这是永远不会发生的),它只会比另一种方法更具可读性。

    但是,总的来说,这是一件非常挑剔的事情,99%的时间都归结为个人偏好。