|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|
|
| これまでは、どちらかというと他のライブラリへの依存性が少ないシンプルなものを扱ってきました。今回からは、今までに実装した関数等を使わなければ実現できない機能を多く含む<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:0|CM:1|▲
|
|
コメント
|
JIS X 3010 によると MB_CUR_MAX の型は size_t でないといけないようです。
|
まじかんと #-|2008/09/20(土) 22:57 [ 編集 ]
|
コメントの投稿
|
|
|
トラックバック
|
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/56-f41092d5
|
|
|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|
|
|
|