fc2ブログ

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

プロフィール 

高木信尚

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

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

 

これまでは、どちらかというと他のライブラリへの依存性が少ないシンプルなものを扱ってきました。今回からは、今までに実装した関数等を使わなければ実現できない機能を多く含む<stdlib.h>ヘッダの実装に入ります。

まずはヘッダの記述からです。<stdlib.h>ヘッダでは、いくつかの型やマクロの定義を行う必要があります。そのうち、size_t、wchar_t、およびNULLについては、<stddef.h>ヘッダと同じですので割愛します。また、div_t、ldiv_t、およびlldiv_t型についてはdiv関数の回に、EXIT_SUCCESSおよびEXIT_FAILUREマクロについてはexit関数の回に、RAND_MAXマクロについてはrand関数の回に、それぞれ取り上げます。

というわけで、最後に残ったのはMB_CUR_MAXマクロです。これは、現在のロケールにおける多バイト文字の最大バイト数です。今のところは"C"ロケールしか扱っていませんので、1に定義しておけばよいのですが、後々のことを考えて、ここでは外部変数を参照する方式を採用します。

#ifndef __cplusplus
extern
#else
extern "C"
#endif
signed char _mb_cur_max;
#define MB_CUR_MAX  ((int)_mb_cur_max)

C++の場合にはextern "C"を付けるようにしています。GCCの場合、オブジェクトに関してはC結合もC++結合も違いはないのですが、念のための保険としてこのようにしておきます。

MB_CUR_MAXマクロの定義で、int型にキャストしているのは、こうしておかないとMB_CUR_MAXに代入したり、インクリメントしたりといった誤操作ができてしまうからです。規格の要件にはありませんが、MB_CUR_MAXは右辺値であるべきです。
2006/05/23 23:42|一般ユーティリティTB:0CM:1

コメント
MB_CUR_MAX の型
JIS X 3010 によると MB_CUR_MAX の型は size_t でないといけないようです。
まじかんと #-|2008/09/20(土) 22:57 [ 編集 ]

コメントの投稿

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


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

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

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

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

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. template designed by 遥かなるわらしべ長者への挑戦.