代码之家  ›  专栏  ›  技术社区  ›  Navaneeth K N

为什么msvc在“while”-c中使用常量时生成警告c4127?

  •  9
  • Navaneeth K N  · 技术社区  · 14 年前

    对于代码,

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

    MSVC生成以下警告。

    warning C4127: conditional expression is constant
    

    MSDN 警告建议使用的页面 for(;;) 而不是 while(1) . 我想知道有什么优势 (;) 是给予和为什么它警告在 while ?

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

    2 回复  |  直到 10 年前
        1
  •  14
  •   Nordic Mainframe    14 年前

    常量条件常常是足够简单的错误。考虑一下:

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

    条件 k>=0 如果k是有符号int,但不适用于无符号int,这是有意义的。一个粗心的开发人员忘记了k被声明为未签名,他/她会把它当作负数使用。编译器试图提供帮助并警告您 while(1) 属于同一问题类的编译器。 for(;;) 更可取,因为它明确地表示“永远循环”

        2
  •  8
  •   Community CDub    8 年前

    for(;;) while (true) 不同的是前者是一个特例 定义 是一个无限循环,而后者则是一种滥用,说“真的,永远”。

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

    我认为海湾合作委员会没有同等的警告。