¿Por qué el tipo de datos booleano no se implementó en C?

Uno de mis amigos hizo una pregunta, ¿por qué no hay ningún tipo de datos Boolean en el lenguaje de progtwigción C. Hice un poco de búsqueda y lectura. Tengo algunas preguntas y respuestas en el desbordamiento de stack diciendo que,

  1. Todos los tipos de datos deben ser direccionables, y un bit no puede ser direccionado.
  2. La estructura de datos básica en el nivel de hardware de las CPU principales es un byte. Operar en bits en estas CPU requiere un procesamiento adicional.

Podemos usar un bool de esta manera

 #define bool int #define TRUE 1 #define FALSE 0 

o use typedef s.

Pero mi pregunta es esta: ¿por qué no se implementó como un tipo de datos en C, incluso después de tantos años? no tiene sentido implementar un tipo de datos de un byte para almacenar un valor booleano en lugar de usar int o short explícitamente.

Eso ya no es verdad. El tipo booleano incorporado, también _Bool como _Bool está disponible desde C99 . Si incluye stdbool.h , su alias bool también está ahí para usted.


_Bool es un verdadero tipo nativo, no un alias de int . En cuanto a su tamaño, el estándar solo especifica que es lo suficientemente grande para almacenar 0 y 1 . Pero en la práctica, la mayoría de los comstackdores hacen su tamaño 1 :

Por ejemplo, este fragmento de código en las salidas de ideone 1 :

 #include  #include  int main(void) { bool b = true; printf("size of b: %zu\n", sizeof(b)); return 0; } 

C99 agregó soporte para el tipo booleano _Bool , no es simplemente un typedef y no tiene que tener el mismo tamaño que int , de la Sección 6.2.5 Tipos de la norma borrador C99:

Un objeto declarado como tipo _Bool es lo suficientemente grande para almacenar los valores 0 y 1.

Tenemos macros de conveniencia a través del encabezado stdbool.h . Esto se puede ver al ir al borrador de la sección 7.16 estándar C99 Tipo y valores booleanos que dice:

El encabezado define cuatro macros.

La macro

bool

se expande a _Bool.

Las tres macros restantes son adecuadas para su uso en directivas de preprocesamiento #if. Son

cierto

que se expande a la constante entera 1,

falso

que se expande a la constante entera 0, y

__bool_true_false_are_defined

que se expande a la constante entera 1.