¿Por qué usar en lugar de _Bool?

Cada vez que tenía la necesidad de un tipo booleano, se me stdbool.h crear uno o, mejor aún, usar stdbool.h .

Dado que stdbool.h usa typedef bool _Bool , ¿hay alguna razón para usar el encabezado en lugar de usar solo el tipo _Bool ? ¿Es solo para las macros adicionales ( /* #define true 1 #define false 0 */ )?

El tipo obvio para agregar al lenguaje fue bool . Pero desafortunadamente, se escribió un montón de código que incluía bool en otras formas y formas. Recuerde que el soporte para un tipo booleano se agregó solo en C99.

Así que el comité de lenguaje C no tuvo más remedio que sacar un identificador reservado para él ( _Bool ). Pero, como la elección obvia de nombre de tipo sigue siendo la misma, se agregó stdbool.h para permitir a los usuarios el nombre obvio. De esa manera, si su código no tenía una bool casera, podría usar el incorporado.

Así que, de hecho, use stdbool.h si no está vinculado a algún bool . Será el tipo estándar, con todos los beneficios que trae ese tipo.

La práctica común siempre ha sido usar bool pero cuando el tipo se introdujo oficialmente en el estándar en C99, no querían romper las implementaciones de “roll-your-own”. Así que hicieron el tipo _Bool como una especie de _Bool alrededor de los bool no oficiales. Ahora no hay colisión de nombre de tipo. De todos modos, el punto es, usa bool menos que se rompa una base de código heredada.

Son lo mismo. bool es un alias para _Bool . Antes de usar C99 no tenemos este tipo. (Anteriormente, el uso se limitaba a un tyoe entero con 0 como falso y 1 como verdadero).

Usted no puede usarlo. Incluso puedes undef bool (pero se recomienda no hacerlo). Pero incluirlo ( stdbool.h y bool alias de _Bool ) es bueno porque entonces, si algún día se vuelve reservado, su código cumple con eso. 1

1. Puedes usar bool otra manera pero es mejor no hacerlo. Porque en general, cuando se presenta este stdbool.h , tiene el plan de hacerlo gradualmente estándar y luego se aplica una regla aún más estricta cuando no podemos usar bool como otra cosa y se reservará como palabra clave .