【问题标题】:Why MSVC generates warning C4127 when constant is used in "while" - C为什么在“while”中使用常量时,MSVC 会生成警告 C4127 - C
【发布时间】:2010-08-16 05:33:11
【问题描述】:

对于代码,

while(1)
{
   /* ..... */
}

MSVC 生成以下警告。

warning C4127: conditional expression is constant

MSDN 警告页面建议使用for(;;) 而不是while(1)。我想知道for(;;) 有什么优势,为什么它会警告while 的持续使用?

我应该在 GCC 上使用什么标志来获得相同的警告?

【问题讨论】:

    标签: c visual-c++ compiler-warnings c4127


    【解决方案1】:

    恒定的条件通常只是简单的错误。考虑一下:

    unsigned k; 
    ...
    while (k>=0) 
    {
     ...
    }
    

    k>=0 条件在 k 是有符号整数时才有意义,但对于无符号整数则不适用。粗心的开发人员忘记了 k 被声明为无符号并且他/她会使用它,就好像它可以用作负数一样。编译器试图提供帮助并警告您这一点,while(1) 属于同一问题类的编译器。 for(;;) 更可取,因为它明确表示“永远循环”

    【讨论】:

    • 编译器非常聪明;足够聪明,可以做各种魔术,但还不够聪明,无法理解“虽然(真)”不受这些问题的影响?
    【解决方案2】:

    for(;;) 和while (true) 的不同之处在于前者是一种特殊情况定义 为无限循环,而后者是一种滥用“真实,永远”的说法。

    警告出现是因为you don't want them 时的无限循环非常糟糕,所以它警告你,你可能在第一个标志处就有一个。但是通过使用for(;;),您已经非常明确地说“永远循环”,没有什么需要警告的。

    我认为 GCC 没有等效的警告。

    【讨论】:

      猜你喜欢
      • 2015-08-31
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      相关资源
      最近更新 更多