プログラミング言語 C の新機能 Part XVII: INT#4:stdbool.h と _Bool 型
(1999/06/14 [月])
多くの人が使っていたけど、言語仕様の中では規定されていなかった...。今度の新しい C 言語では、それが仕様に取り込まれました。それとは bool 型です。多くの人が bool や _bool, BOOL, Bool などと typedef あるいは define をして使用していますが、とうぜん各人によってその名前はバラバラでした。したがって他人の作ったライブラリを利用するとき定義が衝突したりしり、ソースプログラム上で表記の統一がとれなくなったりして、問題が発生しました。
今度の C 言語では新しい整数型 _Bool 型を導入することでその問題を解決します。この型は 0 と 1 が入れば十分な大きさとされており、必ずしも int 型と同じサイズであるとは限りません。簡単に性質を説明すると次のようになります。
この型を実際に使用するときには、新しいヘッダファイル stdbool.h を include することになるでしょう。具体的にはヘッダファイルを見た方が早いと思うので次に示します。
このように stdbool.h を使用することで、bool, true, false と名前を使用することが可能になります。また __bool_true_false_are_defined が定義されるので既存の環境となるべく衝突しないようプログラムを記述することができます。
ちなみに C++ では _Bool 型は存在しませんが、bool, true, false が存在しており、かつすべて予約語なので、特に何もせずに使用することができます。
今度の C 言語では新しい整数型 _Bool 型を導入することでその問題を解決します。この型は 0 と 1 が入れば十分な大きさとされており、必ずしも int 型と同じサイズであるとは限りません。簡単に性質を説明すると次のようになります。
- _Bool型は符号なし型として扱われる
- _Bool型には signed, unsigned はつけられない
- _Bool型は 0 と 1 を格納できれば十分なサイズ
- _Boolに変換するときその値が0なら0、それ以外は 1
- _Bool型はどの標準整数型ランクよりも小さい
- ビットフィールドに無修飾版の _Bool をおける
この型を実際に使用するときには、新しいヘッダファイル stdbool.h を include することになるでしょう。具体的にはヘッダファイルを見た方が早いと思うので次に示します。
/* * stdbool.h (c)1999 seclan * ver1.00 1999/06/14 最初のバージョン */ #ifndef __bool_true_false_are_defined #define bool _Bool #define true 1 #define false 0 #define __bool_true_false_are_defined 1 #endif /* __bool_true_false_are_defined */ |
このように stdbool.h を使用することで、bool, true, false と名前を使用することが可能になります。また __bool_true_false_are_defined が定義されるので既存の環境となるべく衝突しないようプログラムを記述することができます。
ちなみに C++ では _Bool 型は存在しませんが、bool, true, false が存在しており、かつすべて予約語なので、特に何もせずに使用することができます。
by seclan