2012-01-04 15 views
40

Qualcuno può spiegarmi qual è la differenza tra _Bool e il tipo di dati bool in C? Per esempioDifferenza tra i tipi _Bool e bool in C?

_Bool x = 1; 
    bool y = true; 

    printf("%d", x); 
    printf("%d", y); 
+1

'bool' deve essere un typedef, C non ha quel tipo. –

+0

Analogo a _Complex vs complesso. –

risposta

87

Questi tipi di dati sono stati aggiunti nel C99. Poiché bool non era prenotato prima di C99, utilizza la parola chiave _Bool (che era riservata).

bool è uno pseudonimo per _Bool se si include stdbool.h. In sostanza, l'intestazione stdbool.h indica che il codice è corretto con l'identificatore bool che è "riservato", ovvero che il codice non lo utilizzerà per i propri scopi (analogamente agli identificatori true e false).

+4

+1 per includere la cronologia. – Lindydancer

+18

L'intenzione a lungo termine sembra essere che lo standard verrà eventualmente rivisto per fare di bool una parola chiave. Questo è il passaggio 1, dove puoi usare per ottenere la macro bool e ti è ancora permesso di indefinirlo o ridefinirlo per i tuoi scopi nefandi. Il passaggio 2 sarà quello di rifiutare di indefinire o ridefinire bool da per scoraggiare tali imbrogli. Quindi il passaggio 3 è quello di fare bool una parola chiave esattamente come _Bool e contrassegnare _Bool deprecato. Alla fine di questa lunga strada (diciamo, un decennio o due da ora) il codice C standard avrà un tipo di bool e i nuovi programmatori non sapranno che ne è mancato uno. – tialaramex

+2

Non capisco perché questo debba richiedere due decenni dato che è un miglioramento piuttosto ovvio. Il codice che non apprezza questo cambiamento può ancora essere compilato usando le attuali versioni del compilatore. –

13

Non c'è differenza.

bool è una macro che si espande a _Bool in stdbool.h.

E true è una macro che si espande a 1 in stdbool.h

Problemi correlati