【问题标题】:Use of undeclared identifier 'true'使用未声明的标识符“真”
【发布时间】:2012-10-30 15:17:04
【问题描述】:

为什么会出现这个错误:

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);
    }
}

【问题讨论】:

  • 更好:for (;;)。没有神奇的琐碎条件。而且很有可能您实际上可以在其中粘贴本地声明和退出条件。

标签: c compiler-errors


【解决方案1】:

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

  1. 在 C99 中编译并包含 &lt;stdbool.h&gt;
  2. 自行定义此标识符。

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

【讨论】:

    【解决方案2】:

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

    #define TRUE 1
    #define FALSE 0
    
    [...]
    while (TRUE) {
         [...]
    }
    

    【讨论】:

    • C 一个内置的布尔类型,称为_Bool。要让编译器知道truefalse,必须使用#include &lt;stdbool.h&gt;,它们不是内置的——但是你也可以使用bool 而不是_Bool(这有点难看)。
    【解决方案3】:

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

    typedef enum
    {
        true=1, false=0
    }bool;
    

    【讨论】:

    • 如果您没有stdbool.h,请坚持这样做,即为这些值而不是枚举提供预处理器定义。
    • 我认为在这些情况下,更喜欢预处理器定义而不是枚举,反之亦然只是一种形式。
    【解决方案4】:

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

    #define FALSE 0
    #define TRUE 1 // Option 1
    #define TRUE !FALSE // Option 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多