このページ「C言語/標準ライブラリ/uchar.h」は、まだ書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にトークページへどうぞ。


ヘッダー <uchar.h> は、Unicode 文字を操作するための型と関数を宣言しています[1]

ヘッダー <uchar.h> で定義される型[1]

mbstate_t
<wchar.h>で定義。
size_t
<stddef.h>で定義。
char16_t
16ビット文字に使用される符号なし整数型です。
uint_least16_t(<stdint.h>で定義)と同じ型です。
char32_t
32ビット文字に使用される符号なし整数型です。
uint_least32_t(<stdint.h>で定義)と同じ型です。

関数

編集

リスタート可能なマルチバイト/ワイド文字変換関数

編集

これらの関数は、関連するマルチバイト文字列の現在の変換状態を完全に記述することができるオブジェクトを指すmbstate_tへのポインタ型のパラメータ ps を持ち、関数は必要に応じてこのオブジェクトを変更します。 ps が NULL ポインタの場合、各関数は内部の mbstate_t オブジェクトを代わりに使用します。このオブジェクトは、プログラム起動時に初期の変換状態に初期化されます。 この場合、同じ関数の他の呼び出しとのデータ競合を避けるために、関数は必要ありません[2]

mbrtoc16

編集
形式
#include <uchar.h>
size_t mbrtoc16(char16_t * restrict pc16,
const char * restrict s, size_t n,
mbstate_t * restrict ps);
s がNULLポインタの場合は、次の呼び出しと同じです。
mbrtoc16(NULL, "", 1, ps)
この場合、パラメータ pc16 と n の値は無視されます。
sがヌルポインターでない場合、mbrtoc16関数は、sが指すバイトから最大でnバイトを検査し、次のバイトを完了するために必要なバイト数を決定します。
次のマルチバイト文字(シフトシーケンスを含む)を完成させるために必要なバイト数を決定します。
次のマルチバイト文字が完成したと判断した場合 この関数は、次のマルチバイト文字が完全かつ有効であると判断した場合、対応するワイド文字の値を決定し、pc16がヌルポインタでない場合は、最初の(または唯一の)ワイド文字の値を格納します。そのような文字の最初の(あるいは唯一の)値を、pc16 が指すオブジェクトに格納します。後続の呼び出しでは、すべての文字が格納されるまで、追加の入力を消費せずに次々とワイド文字が格納されます。対応するワイド文字がヌルワイド文字であった場合,結果として得られる状態は,初期変換状態です。
戻値
mbrtoc16 関数は,現在の変換状態を考慮して,以下のうち最初に当てはまるものを返します。
次のn個以下のバイトが,ヌルワイド文字(格納されている値)に対応するマルチバイト文字を完成させる場合
0
次の n バイト以下で,有効なマルチバイト文字(格納されている値)が完成する場合
1 以上 n 以下のバイト数。
以前の呼び出しによる次の文字が格納されている場合(入力からのバイトが消費されていない場合)
(size_t)(-3)
次の n バイトが不完全な (しかし潜在的に有効な) マルチバイト文字に寄与する場合。
(size_t)(-2)
エンコーディングエラーが発生し、次の n バイト以下が完全で有効なマルチバイト文字に寄与しない場合(値は格納されない)
(size_t)(-1)
マクロ EILSEQ の値は errno に格納され、変換状態は未定義である。

c16rtomb

編集
形式
#include <uchar.h>
size_t c16rtomb(char * restrict s, char16_t c16,
mbstate_t * restrict ps);

mbrtoc32

編集
形式
#include <uchar.h>
size_t mbrtoc32(char32_t * restrict pc32,
const char * restrict s, size_t n,
mbstate_t * restrict ps);

c32rtomb

編集
形式
#include <uchar.h>
size_t c32rtomb(char * restrict s, char32_t c32,
mbstate_t * restrict ps);

環境マクロ

編集

あらかじめ定義されたマクロ名のうち、環境マクロ(Environment macros[3])は、<uchar.h> に関連するので、ここで紹介します[4]

__STDC_ISO_10646__
yyyymmL形式の整数定数(例:199712L)。
このシンボルが定義されている場合、Unicode必須集合( Unicode required set )のすべての文字は、wchar_t型のオブジェクトに格納されている場合、その文字の短い識別子と同じ値を持ちます。
Unicode必須集合は、ISO/IEC 10646で定義されているすべての文字は、マクロの値で示された年月におけるすべての修正および技術的コーリゲンダで構成されています。
他のエンコーディングが使用されている場合は、マクロを定義してはならず、実際に使用されるエンコーディングは実装で定義される。
__STDC_MB_MIGHT_NEQ_WC__
整数定数 1 ならば、wchar_t のエンコーディングにおいて、基本文字セットのメンバーが整数文字定数の単独文字として使用されるときに、その値と等しいコード値を持つ必要がないことを示すことを意図しています。
__STDC_UTF_16__
整数定数 1 ならは、char16_t型の値がUTF-16でエンコードされていることを示します。他のエンコーディングが使用されている場合は、このマクロを定義してはならず、実際に使用されるエンコーディングは実装で定義されます。
__STDC_UTF_32__
整数定数 1 ならは、char32_t型の値がUTF-32でエンコードされていることを示します。他のエンコーディングが使用されている場合は、このマクロは定義してはならず、実際に使用されるエンコーディングは実装で定義されます。


歴史

編集

<uchar.h> は、C Unicode Technical Report ISO/IEC TR 19769:2004が初出で[5]、ISO/IEC 9899:2011(C11)で追加されました[1]

脚註

編集
  1. ^ 1.0 1.1 1.2 C11: WG14/N1570 Committee Draft — April 12、 2011 ISO/IEC 9899:201x. ISO/IEC. p. 398、 §7.28 Unicode utilities <uchar.h>. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  2. ^ C11: WG14/N1570 Committee Draft — April 12、 2011 ISO/IEC 9899:201x. ISO/IEC. p. 398、 §7.28.1 Restartable multibyte/wide character conversion functions. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  3. ^ C11: WG14/N1570 Committee Draft — April 12、 2011 ISO/IEC 9899:201x. ISO/IEC. p. 176, § 6.10.8.2 Environment macros. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  4. ^ C++ではC++20から、char16_t型のエンコーデょングはUTF-16、char32_t型のエンコーディングはUTF-32はであることが標準規格の一部となりました。
  5. ^ C11: WG14/N1570 Committee Draft — April 12、 2011 ISO/IEC 9899:201x. ISO/IEC. p. xiii, Foreword. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 

参考文献

編集