2012-03-01 15 views
14

Me parece que no existe el tipo nativo bool. La gente usa int o char - aunque parece que int se puede usar con más frecuencia que char? ¿Es esto cierto?Char o Int para el valor booleano en C?

Mi primer impulso fue utilizar char ya que es un tipo de datos más pequeño, pero ¿hay algo que me haya perdido? Es int mejor para valores booleanos, y si es así, ¿por qué?

+0

tal vez porque 0 es falso con un int? ¡más intuitivo! – Ali

+0

int tiende a ser utilizado ya que es intuitivo, char se utiliza para obtener un tamaño de datos óptimo. –

+2

@Ali Un 'char' sería promovido a 'int' en una declaración' if' de todos modos. Es solo una cuestión de optimización del espacio: 'char's generalmente son más pequeños que' int's. –

Respuesta

12

Hay _Bool en C99, y bool si incluye stdbool.h.

Si no lo tiene (un compilador decentemente moderno), use int, generalmente es el tipo más rápido. Los ahorros de memoria de usar char son probablemente insignificantes.

+0

¿Por qué 'char' es más rápido que' int'? Quiero decir, ¿un tipo de datos más grande es más rápido de procesar? – thomthom

+2

@thomthom Lo que realmente dije es que 'int' es más rápido. Es el más rápido porque tiene el tamaño de palabra natural de la CPU. Es lo que anhelan las CPU. Ver [esta impresionante respuesta] (http://stackoverflow.com/a/5069643/226266). – cnicutar

+0

He visto el 'bool' en C99 - Me preguntaba si usaría' char' vs 'int' si no lo hiciera. Solo para entender más de cómo funciona todo. Pero si incluimos 'bool' en esto, ¿cómo está el rendimiento con' int'? ¿Es un int encubierto, o un nuevo tipo de datos genuino? – thomthom

3

Si está utilizando un compilador de C razonablemente moderno, entonces sólo tiene:

#include <stdbool.h> 

Esto normalmente tiene una macro tales como:

#define bool _Bool 

que le permite utilizar de C99 incorporada _Bool escriba donde necesite bool.

2

Hay un tipo nativo llamado _Bool (comenzando con C99). En <stdbool.h>, también hay un #define para proporcionar bool como un alias, si lo desea (también tiene #define s para true y false).

1

En realidad, no hay una diferencia real ya que siempre se promueve el uso de char cuando se utiliza (ver this). Nunca he visto un char usado como bool, así que iría por usar un int.

+0

¿Por eso' int' es más rápido? Porque ' char' se convierte en un 'int'? – thomthom

+0

@thomthom: Sí, es por eso.Pero el aumento de velocidad es tan pequeño que puedes olvidarlo :) – BlackBear

0

De acuerdo con ISO-9899 el resultado de los operadores de relación, lógica e igualdad tiene el tipo int. true y false de stdbool.h también son enteros. Si desea ahorrar memoria, use campos de bits.