Verwendung des nicht deklarierten Bezeichners „true“
Lesezeit: 2 Minuten
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:
In C99 kompilieren und einbinden <stdbool.h>.
Definieren Sie diese Kennung selbst.
Allerdings die Endlosschleife for (;;) wird oft als besserer Stil angesehen.
Adam Sznajder
C hat keine eingebauten booleschen Typen. Es weiß also nicht was true ist. Sie müssen es auf diese Weise selbst deklarieren:
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:
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