使用未声明的标识符'true'

gad*_*tmo 26 c compiler-errors

为什么我收到此错误:

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

1 error generated.
make: *** [infinite] Error 1
Run Code Online (Sandbox Code Playgroud)

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

#include <stdio.h>

int main(void) {
    int x = 0;
    while (true) {
        printf("%i\n", x);
    }
}
Run Code Online (Sandbox Code Playgroud)

md5*_*md5 36

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

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

然而,无限循环for (;;)通常被认为是更好的风格.


Ada*_*der 18

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

#define TRUE 1
#define FALSE 0

[...]
while (TRUE) {
     [...]
}
Run Code Online (Sandbox Code Playgroud)

  • C _has_是一个内置的布尔类型,它叫做`_Bool`.要让编译器知道`true`和`false`,必须要`#include <stdbool.h>`,那些不是内置的 - 但是你也可以使用`bool`而不是`_Bool`(这是有点难看) (10认同)

Ram*_*uri 5

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

typedef enum
{
    true=1, false=0
}bool;
Run Code Online (Sandbox Code Playgroud)