【问题标题】:What is the proper equivalent of "while(true)" in plain C?纯 C 中“while(true)”的正确等价物是什么?
【发布时间】:2015-08-21 03:13:43
【问题描述】:

由于 C 没有 bools,在使用

的算法中替换 true 的正确变量是什么
do
{
   // ... 
} while(true);

???

一个合适的C程序员应该这样做

do
{
   // ... 
} while(1);

或者是否有一个特定的变量被保留来表示“s不是零/NULL的东西”?

【问题讨论】:

标签: c algorithm


【解决方案1】:

现在我经常看到

while(1) {
    ...
}

以前很常见

for(;;) {
    ...
}

这一切都明白了。

【讨论】:

  • 一些编译器对编译时常量为真的循环条件表达式发出警告;所以出于这个原因,在 C 和 C++ 中都更喜欢for(;;)
  • for(;;) 更独立于语言(例如,也适用于 Java)并且在我看来更直观,我称之为forever
  • #define EVER ;;, for(EVER) {}
【解决方案2】:

你的问题并不是关于bool(如果你#include <stdbool.h>,现代C确实有),它是关于编写无限循环的最佳方式。

常见的成语有:

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

for (;;) {
    /* ... */
}

后者看起来有点晦涩,但定义明确。 for 循环头中的三个表达式中的任何一个都可以省略;如果省略了控制循环何时继续执行的第二个表达式,则默认为 true。

while (1) 可能是最直接的方法——但一些编译器可能会警告始终为真的条件。 for (;;) 可能会避免这种情况,因为没有(显式)表达式需要警告。

有一些更棘手的方法可以编写无限循环(while (1 + 1 == 2) 等人,但没有一个真正值得努力。

【讨论】:

    【解决方案3】:

    如果您使用的是 c89:

    创建一个布尔定义:

    typedef int bool;
    #define true 1
    #define false 0
    

    或常量:

    /* Boolean constants. */
    #define TRUE 1
    #define FALSE 0
    

    这给 int 一个含义。

    或者(如这里其他地方提到的)如果使用 c99:

    #include <stdbool.h>
    

    我最近的大学经历,是不是要求你用c89。

    http://en.wikipedia.org/wiki/C_data_types#stdbool.h

    【讨论】:

    • 或者,更简单地说,typedef enum { false, true } bool;。或者,更简单地说,#include &lt;stdbool.h&gt;
    • @user3956566 无需延续这些古物
    • @user3956566:在 C89/C90 中,您可以使用我提到的第一个替代方案。您甚至可以让__STDC_VERSION__ 选择其中一个。
    【解决方案4】:

    C 有stbool.h 头文件来使用bool 变量。

    所以这行得通

    #include <stdio.h>
    #include<stdbool.h>
    int main(void) {
        int i=1;
        while(true)
        {
            if(i==3){       
            break;
            }
            printf("%d\n",i);
            i++;
        }
    return 0;
    }
    

    输出

    1  
    2
    

    注意:现代 C99 支持 bool 变量,但 C89/90 不支持。

    如果您使用的是 C89/90,那么您可以使用typedefconstants,如此处的答案之一所述,或者您也可以像这样使用enums

       typedef enum {false, true } bool;    
       bool b=true;
       int i=1;
       while(b)
       {
            if(i==3){       
            break;
            }
            printf("%d\n",i);
            i++;
        }
    

    输出

    1  
    2
    

    你可以查看这个bool in C

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-07-26
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多