2012-11-10 2 views
21

Perché mi appare questo errore:L'utilizzo di identificatore non dichiarato 'vero'

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

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

... quando provo a compilare questo semplice codice per un loop infinito?

#include <stdio.h> 

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

mm .. usare 'while (1)' –

+1

Ancora meglio: 'for (;;)'. Nessuna magica condizione banale. E c'è la possibilità che tu possa effettivamente attaccare le dichiarazioni locali e le condizioni di uscita comunque. –

risposta

16

C non ci sono tipi booleani incorporati. Quindi non sa cosa sia true. Devi dichiararlo da solo in questo modo:

#define TRUE 1 
#define FALSE 0 

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

C _has_ un tipo booleano incorporato, si chiama '_Bool'. Per far sì che il compilatore conosca 'true' e' false', si deve '#include ', quelli non sono built-in - ma poi si può anche usare 'bool' invece di' _Bool' (che è un po 'brutto) . –

4

Includere stdbool.h per utilizzare booleani C99.
Se si vuole attaccare con C89 definiscono da soli:

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

Se non si ha 'stdbool.h', limitarsi a ciò che farebbe, cioè dare al preprocessore le definizioni per questi valori e non per le enumerazioni. –

+0

Penso che preferire il preprocessore al di sopra delle enumerazioni o viceversa sia solo una formalità in questi casi. –

30

L'identificatore true non è dichiarato per impostazione predefinita. Per utilizzarlo, due soluzioni:

  1. Compilare in C99 e includere <stdbool.h>.
  2. Definisci questo identificatore da solo.

Tuttavia, il ciclo infinito for (;;) viene spesso considerato come uno stile migliore.