普通C中"while(true)"的正确等价是什么?

Mic*_*dge 9 c algorithm

由于C没有bools,true在使用的算法中代替什么是适当的变量

do
{
   // ... 
} while(true);
Run Code Online (Sandbox Code Playgroud)

???

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

do
{
   // ... 
} while(1);
Run Code Online (Sandbox Code Playgroud)

或者是否有一个特定的变量保留意味着" 不是零/空 "的东西?

U2E*_*EF1 15

通常现在我明白了

while(1) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

以前常见

for(;;) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这一切都得到了重点.

  • `#define EVER ;;`, `for(EVER) {}` (2认同)

Kei*_*son 10

你的问题是不是真正的bool(其中现代C 有,如果你#include <stdbool.h>),它是关于写一个无限循环的最佳方式.

常见的习语是:

while (1) {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

for (;;) {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

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

while (1)可能是最简单的方法 - 但有些编译器可能会警告一个始终正确的条件.for (;;)可能会避免这种情况,因为没有(明确的)表达来警告.

编写无限循环有一些比较棘手的方法(while (1 + 1 == 2)等等,但它们都不值得付出努力.


Yve*_*omb 6

如果您使用的是c89:

创建一个布尔定义:

typedef int bool;
#define true 1
#define false 0
Run Code Online (Sandbox Code Playgroud)

或常数:

/* Boolean constants. */
#define TRUE 1
#define FALSE 0
Run Code Online (Sandbox Code Playgroud)

这给了int一个含义.

或者(如本文其他地方所述)如果使用c99:

#include <stdbool.h>
Run Code Online (Sandbox Code Playgroud)

我最近的大学经历是,他们要求你使用c89.

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

  • 或者,更简单地说,`typedef enum {false,true} bool;`.或者,更简单地说,`#include <stdbool.h>`. (3认同)

aak*_*sha 5

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;
}
Run Code Online (Sandbox Code Playgroud)

输出

1  
2
Run Code Online (Sandbox Code Playgroud)

注意:现代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++;
    }
Run Code Online (Sandbox Code Playgroud)

输出

1  
2
Run Code Online (Sandbox Code Playgroud)

你可以在 C 中检查这个bool

希望对你有帮助。