ワイド文字

ワイド文字（ワイドもじ、）とは、主にC言語およびC++における文法要素で、1文字あたりのバイト数を通常より多くしたデータ型である。
概要.
C言語やC++の基本実行文字集合は通常、ASCIIのサブセットの文字種からなる。ただし実際の文字コードが何であるかは規定されていない。
漢字のような拡張実行文字集合は、通常マルチバイト文字として扱われるが、1文字を構成するバイト数が可変長であり、本来1つの文字でありながら複数の文字の組（あるいは文字列）として扱わなければならないなどの不便がある。そうした問題を解消するために、1文字を1つの整数値で扱えるようにすることを目指したのがワイド文字である。
wchar_t型.
C言語では1995年の ISO/IEC 9899/AMD1:1995 より、codice_1 型や <wchar.h>、<wctype.h> などのヘッダーファイルが追加になった。ワイド文字は codice_1 というデータ型で表現する。codice_3型を用いた文字および文字列の場合、文字定数および文字列リテラルはソースコード中で、例えばそれぞれ「codice_4」および「codice_5」と表記する。これに対応するように、ワイド文字定数は大文字のエルによるプレフィックスcodice_6を付けて「codice_7」と表記する。同様に、ワイド文字から構成される文字列をワイド文字列と呼び、そのリテラルは「codice_8」と表記する。
C言語での codice_1 は単なるcodice_10によるエイリアス（他の型の別名として定義されている）であるが、C++においてはキーワード（予約語）である。コンパイラによっては、「codice_1」を組み込みの型とみなすか否かをコンパイラの設定で切り替えられるものもある。
C99 規格や C++98 規格の場合、ワイド文字定数・文字列リテラルには ISO 10646 文字集合の数値で表現するユニバーサル文字名を使用することもできる。
内部表現.
codice_3型のサイズは常に1バイトであることがC/C++規格で保証される。つまり、codice_13は常に真である。
一方、codice_1 型は C および C++ 双方の標準規格において、符号付きの場合は少なくとも-127から+127まで、符号無しの場合は少なくとも0から255までの範囲を表現できる数値型、ということのみ定められている（少なくともcodice_3型と同じ大きさが必要）。codice_3がASCIIであるとは限らなかったり、codice_17やcodice_18がIEEE 754の単精度・倍精度であるとは限らなかったりすることと同様に、codice_1の内部表現もUnicodeである必要はない。本来はCode Set Independent（符号化集合に独立）なのである。
codice_1 型のサイズと符号化形式は、例えばWindowsでは2バイト (16ビット) のUTF-16であり、LinuxやmacOSでは4バイト (32ビット) のUTF-32である。しかし、。そのようなプログラムは、Unicodeを用いた符号化形式とは限らない一般のUnixなどへの移植の際に問題が表面化する。なお、C99より、codice_1がUnicodeと互換性のある場合、codice_22が事前定義されると定められている。
char16_t, char32_t型.
ワイド文字の問題は、前述のように型のサイズや符号化形式が規定されておらず、プラットフォームおよび処理系依存であることである。Unicodeが普及するにつれて、移植性の問題が表面化してきた。
2011年に改訂された C/C++ の標準規格、C11 と C++11 では、新たに2つの文字型 codice_23 と codice_24 が導入された。これらはそれぞれ UTF-16 と UTF-32 を内部表現とする。codice_25 や codice_26 あるいは codice_27 や codice_28 のように小文字の codice_29 あるいは大文字の codice_30 を前置することで、それぞれ codice_23 と codice_24 の文字定数・文字列リテラルを表現する。また、codice_33 を前置することで UTF-8 の文字列リテラルを表現するが、codice_34 型は存在せず、従来の codice_3 型で代用する。C++17ではUTF-8の文字リテラルをサポートするようになった。C++20ではcodice_34型がサポートされるようになる予定である。
C言語の場合codice_23およびcodice_24はそれぞれcodice_39およびcodice_40のtypedefエイリアスであるが、C++の場合codice_23およびcodice_24はキーワードであり、それぞれcodice_43およびcodice_44と同じサイズではあるものの、別の型として規定されている。
いずれの言語においても、codice_23型のサイズは16ビットよりも大きい可能性があるが、格納される値は16ビット幅である。同様に、codice_24型のサイズは32ビットよりも大きい可能性があるが、格納される値は32ビット幅である。
D言語.
D言語では、charと別に、次の2つの文字型が用意されている。