ワイド文字
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ワイド文字(ワイドもじ)とは、主にC言語およびC++における文法要素で、1文字あたりのバイト数を通常より多くしたデータ型である。
[編集] 概要
C言語やC++の基本実行文字集合は通常、ASCIIのサブセットの文字種からなる(ただし実際の文字コードが何であるかは異なりうる)。
漢字のような拡張実行文字集合は、通常マルチバイト文字として扱われるが、1文字を構成するバイト数が可変長であるとともに、本来1つの文字でありながら複数の文字の組(あるいは文字列)として扱わなければならないなどの不便がある。そうした問題を解消するために、1文字を1つの整数値で扱えるようにすることを目指したのがワイド文字である。
[編集] 表記
CおよびC++においては、ワイド文字はwchar_t型で表現する。CおよびC++の標準規格では、wchar_t型の表現範囲は少なくとも-127~+127または0~255である、ということのみ定められている(少なくともchar型と同じ大きさが必要)。wchar_t型が実際に拡張実行文字集合を表現できるかどうかは処理系に依存し、Windowsでは16ビット(UTF-16)、Unix系では32ビット(UTF-32)であることが多い。
C言語での「wchar_t」は単なるtypedef名(他の型の別名として定義されている)であるが、C++では「wchar_t」は予約語として扱われる。コンパイラによっては、「wchar_t」を予約語とみなすか否かコンパイラの設定で切り替えられるものもある。
ワイド文字定数は「L'文字'
」として表記される(通常の文字定数は「'文字'
」)。C99またはC++の場合、ワイド文字定数にはISO 10646文字集合の数値で表現するユニバーサル文字名を使用することもできる。
ワイド文字から構成される文字列をワイド文字列と呼ぶ。ワイド文字列定数は「L"文字列"
」として表記される。C99やC++では、ワイド文字列定数中でもユニバーサル文字名を使用することができる。通常の文字列の場合は「'\0'
」で文字列の終端を表すが、ワイド文字列では「L'\0'
」を用いる。
他のプログラミング言語においては、このように2種類の文字・文字列型を持っているものは少ない。
Windows APIでは、文字および文字列の関わる関数・構造体について、ASCII文字列(ASCIIを元としたマルチバイト文字列を含む。日本語環境であればShift_JIS)とワイド文字列のどちらを与えることもできるように、2つの関数・構造体などが準備されている。その場合、ASCII文字列を与えるべき関数・構造体は末尾に「A」を付け(この「A」は「ASCII」ではなく「ANSI」の意味とされている)、ワイド文字列を与えるべき関数・構造体は末尾に「W」を付けて区別している。なお、Windows 9x系では、ワイド文字列対応の関数は一部しか実装されていないものの、MSLUを利用することにより、ほとんどのワイド文字版APIが使用可能になる。[1]
カテゴリ: C言語 | C++ | プログラミング言語の構文 | 文字コード