web-dev-qa-db-fra.com

Utilisation d'un identifiant non déclaré «vrai»

Pourquoi ai-je cette erreur:

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

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

... quand j'essaye de compiler ce code simple pour une boucle infinie?

#include <stdio.h>

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

L'identifiant true n'est pas déclaré par défaut. Pour l'utiliser, deux solutions:

  1. Compilez en C99 et incluez <stdbool.h>.
  2. Définissez vous-même cet identifiant.

Cependant, la boucle infinie for (;;) est souvent considérée comme un meilleur style.

36
md5

C n'a pas de types booléens intégrés. Il ne sait donc pas ce qu'est true. Vous devez le déclarer vous-même de cette manière:

#define TRUE 1
#define FALSE 0

[...]
while (TRUE) {
     [...]
}
18
Adam Sznajder

Incluez stdbool.h pour utiliser les booléens C99.
Si vous voulez vous en tenir à C89, définissez-le vous-même:

typedef enum
{
    true=1, false=0
}bool;
4
Ramy Al Zuhouri

Vous obtenez cette erreur car vous n'avez pas défini les valeurs true et false en C. Vous pouvez le faire en ajoutant quelques lignes simples à votre code comme suit:

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