37

为什么我会收到此错误:

infinite.c:5:12: error: use of undeclared identifier 'true'
    while (true) {

1 error generated.
make: *** [infinite] Error 1

...当我尝试为无限循环编译这个简单的代码时?

#include <stdio.h>

int main(void) {
    int x = 0;
    while (true) {
        printf("%i\n", x);
    }
}
4

4 回答 4

53

true默认情况下不声明标识符。要使用它,有两种解决方案:

  1. 在 C99 中编译并包含<stdbool.h>.
  2. 自己定义这个标识符。

但是,无限循环for (;;)通常被认为是更好的样式。

于 2012-11-10T14:39:22.267 回答
26

C 没有内置的布尔类型。所以它不知道是什么true。您必须以这种方式自行声明它:

#define TRUE 1
#define FALSE 0

[...]
while (TRUE) {
     [...]
}
于 2012-11-10T14:05:16.970 回答
4

包含 stdbool.h 以使用 C99 布尔值。
如果您想坚持使用 C89,请自行定义:

typedef enum
{
    true=1, false=0
}bool;
于 2012-11-10T14:09:00.300 回答
0

您收到此错误是因为您尚未在 C 中定义 true 和 false 的值。您可以通过在代码中添加几行简单的代码来做到这一点,如下所示:

#define FALSE 0
#define TRUE 1 // Option 1
#define TRUE !FALSE // Option 2
于 2019-07-03T05:36:33.590 回答