C99に対応した標準Cライブラリの実装レポートを行っていきます。

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

ホーム 全記事一覧 << 前の記事 次の記事 >>

 

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:0CM:0

コメント
コメントの投稿

管理者にだけ表示を許可する


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/14-ed1f67ca

ホーム 全記事一覧 << 前の記事 次の記事 >>

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

このブログをリンクに追加する

Powered By FC2ブログ 

Powered By FC2ブログ
ブログやるならFC2ブログ

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. 無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て template designed by 遥かなるわらしべ長者への挑戦.