|
|
|
| 2008/10/07 11:40||▲
|
|
|
C99からは、C言語にも真理値型が導入されました。本来であれば、その型名はC++と同じ「bool」にしたかったのでしょうが、既存のソースコードの多くは、「bool」型を独自に定義していたため、混乱を避けるために、予約済み識別子であった「_Bool」が真理値型を表す予約語となったようです。
ところが、やはり使い勝手からすると「_Bool」より「bool」の方がよいので、「bool」を使えるようにするために用意されたのが<stdbool.h>です。今回は、この<stdbool.h>についてです。
まず、標準Cライブラリが提供する「bool」(および「true」、「false」)が使用されているかどうかを判別するためのマクロを定義しなければなりません。そのマクロは、__bool_true_false_are_definedです。今回は、このマクロを二重インクルードガードの目的にも流用します。したがって、
#ifndef __bool_true_false_are_defined #define __bool_true_false_are_defined /* 内容 */ #endif
というのが、ヘッダの枠組みになります。
次に、boolマクロを定義します。boolをtypedef名ではなくマクロとしているのは、typedef名にすると、ブロック有効範囲内で同名の識別子が再定義されてしまうためかと思われます。
#define bool _Bool
そして最後に、真理値定数であるtrueおよびfalseをマクロ定義します。
#define true 1 #define false 0
C++とは異なり、trueおよびfalseは単なるint型になります。これは、否定演算子、等価演算子、関係演算子の結果が、C++ではbool型であるのに対して、C99ではint型であることにも関係していると思われます。
C++に<stdbool.h>を対応させるには、単にbool、true、およびfalseの定義を無効にするだけで可能です。具体的には、
#ifndef __cplusplus
#define bool _Bool #define true 1 #define false 0
#endif
のようにすることで、それらのマクロはC++では定義されなくなります。
|
| 2006/01/26 12:35|その他のライブラリ|TB:0|CM:0|▲
|
|
|
コメント
|
|
コメントの投稿
|
|
|
|
|
トラックバック
|
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/14-ed1f67ca
|
|
|
|
|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|