Verwendung des nicht deklarierten Bezeichners „true“

Lesezeit: 2 Minuten

Benutzeravatar von gadgetmo
gadgetmo

Warum erhalte ich diesen Fehler:

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

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

… wenn ich versuche, diesen einfachen Code für eine Endlosschleife zu kompilieren?

#include <stdio.h>

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

  • Noch besser: for (;;). Keine magischen trivialen Bedingungen. Und die Chancen stehen gut, dass Sie lokale Deklarationen und die Ausgangsbedingung sowieso dort einfügen können.

    – Kerrek SB

    10. November 2012 um 14:10 Uhr


Die Kennung true ist standardmäßig nicht deklariert. Um es zu verwenden, zwei Lösungen:

  1. In C99 kompilieren und einbinden <stdbool.h>.
  2. Definieren Sie diese Kennung selbst.

Allerdings die Endlosschleife for (;;) wird oft als besserer Stil angesehen.

Benutzeravatar von Adam Sznajder
Adam Sznajder

C hat keine eingebauten booleschen Typen. Es weiß also nicht was true ist. Sie müssen es auf diese Weise selbst deklarieren:

#define TRUE 1
#define FALSE 0

[...]
while (TRUE) {
     [...]
}

  • C hat ein eingebauter boolescher Typ, heißt er _Bool. Damit der Compiler Bescheid weiß true und falseeiner muss #include <stdbool.h>die sind nicht eingebaut – kann man dann aber auch verwenden bool Anstatt von _Bool (was ein bisschen hässlich ist).

    – Daniel Fischer

    10. November 2012 um 14:33 Uhr

Schließen Sie stdbool.h ein, um C99-Boolesche Werte zu verwenden.
Wenn Sie bei C89 bleiben wollen, definieren Sie es selbst:

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

  • Wenn Sie nicht haben stdbool.h Bleiben Sie einfach bei dem, was das tun würde, nämlich Präprozessordefinitionen für diese Werte und keine Aufzählungen zu geben.

    – Jens Gustedt

    10. November 2012 um 15:26 Uhr

  • Ich denke, dass die Bevorzugung von Präprozessordefinitionen gegenüber Aufzählungen oder umgekehrt in diesen Fällen nur eine Formalität ist.

    – Ramy Al Zuhouri

    10. November 2012 um 17:20 Uhr

Sie erhalten diesen Fehler, weil Sie die Werte von true und false in C nicht definiert haben. Sie können dies tun, indem Sie Ihrem Code wie folgt einige einfache Zeilen hinzufügen:

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

1397650cookie-checkVerwendung des nicht deklarierten Bezeichners „true“

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy