2012-03-01 9 views
14

Trovo che non ci sia il tipo nativo bool. Le persone usano entrambi int o char - anche se sembra che int possa essere utilizzato più frequentemente di char? È vero?Char o Int per il valore booleano in C?

Il mio primo impulso è stato quello di utilizzare char in quanto è un tipo di dati più piccolo, ma c'è qualcosa che ho perso? int è migliore per i valori booleani e, in caso affermativo, perché?

+0

forse perché 0 è falso con un int? più intuitivo! – Ali

+0

int tende ad essere utilizzato in quanto non è intuitivo, viene utilizzato char per la dimensione dei dati ottimale. –

+2

@Ali Un 'char' verrebbe promosso ad un' int' in una dichiarazione 'if' comunque. È solo una questione di ottimizzazione dello spazio: 'char's sono generalmente più piccoli di' int's. –

risposta

12

C'è un _Bool in C99 e un bool se si include stdbool.h.

Se non ce l'hai (un compilatore moderno decentemente), utilizza int, di solito è il tipo più veloce. I risparmi di memoria dell'utilizzo di char sono probabilmente trascurabili.

+0

Quindi, perché 'char' più veloce di' int'? Voglio dire, un tipo di dati più grande è più veloce da elaborare? – thomthom

+2

@thomthom Quello che ho effettivamente detto è che 'int' è più veloce. È il più veloce perché ha le dimensioni naturali delle parole della CPU. È ciò che le CPU bramano. Vedi [questa fantastica risposta] (http://stackoverflow.com/a/5069643/226266). – cnicutar

+0

Avevo visto il 'bool' in C99 - Mi chiedevo solo l'uso di' char' vs 'int' se non lo facessi. Solo per capire di più su come funziona tutto. Ma se includiamo 'bool' in questo, come è nella performance con' int'? È un int cloaked o un vero nuovo tipo di dati? – thomthom

3

Se stai usando un abbastanza moderno compilatore C Poi basta:

#include <stdbool.h> 

Questo ha tipicamente una macro come ad esempio:

#define bool _Bool 

che consente di utilizzare di C99 built-in _Bool digitare ovunque sia necessario un bool.

2

Esiste un tipo nativo denominato _Bool (che inizia con C99). In <stdbool.h>, c'è anche un #define per fornire bool come alias, se lo si desidera (ha anche #define s per true e false).

1

In realtà non vi è alcuna reale differenza poiché char viene sempre promosso a int quando lo si utilizza (controllare this). Non ho mai visto un char usato come bool, quindi userei un int.

+0

Ecco perché "int" è più veloce? char' è trasformato in un 'int'? – thomthom

+0

@thomthom: Sì, ecco perché.Ma il guadagno di velocità è così piccolo che puoi dimenticarlo :) – BlackBear

0

Secondo ISO-9899 il risultato della relazione, gli operatori logici e di uguaglianza ha tipo int. true e false da stdbool.h sono anche numeri interi. Se vuoi risparmiare della memoria, usa i campi di bit.