_Bool

読み:アンダースコア・ブール
外語:_Bool
品詞:名詞

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となる。