ISO/IEC 9899:1999(いわゆるC99、日本語規格はJIS X 3010:2003)から追加された予約語の一つ。論理型を宣言する。
元々Cには論理型がなかった。Cの後継とも言えるC++では、Cにはない予約語boolが追加されている。
その後を追うように、CでもC99から、後ればせながら_Boolが予約語として追加された。
本来はC++と同様にboolとしたかったが、既に多くのCプログラムで独自にbool型を定義してしまっていたため、混乱を避けるためboolとは出来なかったのである。
実際に_Boolという「変な」予約語を直接使うことは考えにくく、恐らく多くのプログラマは必要に応じ、typedefして使っているだろう。具体例は次のとおり。
#ifndef __cplusplus
typedef _Bool bool;
#endif
こうすれば、表向きはC++と何ら変わらない使い勝手が実現できる。
_Bool型は、0または1を格納するのに充分な大きさを持っている、符号無しの整数型である。
つまり、この変数には0や1を「即値で」代入することになる。
とは言え、これでは不便かつ分かりにくいので、C99では「stdbool.h」という新しいヘッダファイルが定義された。この中で、次のような定義がされている。
#define true 1
#define false 0
つまり、C++のそれとは異なり、このtrue/falseは予約語ではなく単なるマクロで、int型の定数である。
_Bool型変数はC++のboolよりも更に一般の整数型変数に近い性質を持っている。この型には0と1しか格納できないが、それ以外は他の整数型変数となんら変わらずに利用できる。
他の変数型や直定数(リテラル)を_Bool型にキャストした場合、元の値が0なら0、さもなくば1が_Bool型変数に代入される。
逆に_Bool型を他の型にキャストした場合、結果は内容に応じ、0または1となる。