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

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

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

 

2008/10/07 11:41|

 

今回は空白類文字の判別関数についてお話します。これで<ctype.h>内で宣言されるis〜系関数は終わりです。

isspace関数の厳密な仕様は、isalnum関数が偽となる処理系定義の文字、または標準空白類文字に対して真となります。標準空白類文字は、空白類文字とは異なり、復帰文字 '\r' が含まれます。isspace関数の実装は、他のis〜関数と同様、

static __inline__ int isspace(int c)
{
  return __ctype[c] & _SPACE;
}

とします。"C"ロケールで真になるのは、空白文字 ' '、水平タブ文字 '\t'、垂直タブ文字 '\v'、書式送り文字 '\f'、改行文字 '\n'、および復帰文字 '\r' です。

さて、C95までであれば、ここまででis〜系関数は終わりなのですが、C99では関数が一つ追加されました。それがisblank関数です。この関数は行内空白類文字を判別するためのものです。"C"ロケールでは、標準行内空白類文字かどうかの判別を行うことになります。標準行ない空白類文字には、空白文字 ' ' と水平タブ '\t' が含まれます。

厳密に言えば、isblank関数もロケールによって動作が変わるので、表引きにすべきなのかもしれませんが、実際問題として、およそ扱う可能性のあるロケールでは、標準行内空白類文字の判別ができれば十分ですので、今回は決めうちにします。

というのも、C95の範囲の関数で、8ビットあるビットパターンはすべてふさがっており、isblank関数を表引きにしようとすると、それだけで表のサイズが倍になってしまうからです。したがって、今回は、

static __inline__ int isblank(int c)
{
  return c == ' ' || c == '\t';
}

のように定義することにします。
2006/02/08 23:59|文字種別TB:0CM:0

コメント
コメントの投稿

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


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

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

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

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

Powered By FC2ブログ 

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

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