ワイド文字
char型のサイズは常に1バイトであることがC/C++規格で保証される。つまり、sizeof(char) == 1は常に真である。
一方、wchar_t 型は C および C++ 双方の標準規格において、符号付きの場合は少なくとも-127から+127まで、符号無しの場合は少なくとも0から255までの範囲を表現できる数値型、ということのみ定められている(少なくともchar型と同じ大きさが必要)。charがASCIIであるとは限らなかったり、floatやdoubleがIEEE 754の単精度・倍精度であるとは限らなかったりすることと同様に、wchar_tの内部表現もUnicodeである必要はない。本来はCode Set Independent(符号化集合に独立)なのである。
wchar_t 型のサイズと符号化形式は、例えばWindowsでは2バイト (16ビット) のUTF-16であり、LinuxやmacOSでは4バイト (32ビット) のUTF-32である。しかし、その他の環境でもUnicodeを用いた符号化形式であると誤解されて、あるいは仮定してプログラムが作られることがある。そのようなプログラムは、Unicodeを用いた符号化形式とは限らない一般のUnixなどへの移植の際に問題が表面化する。なお、C99より、wchar_tがUnicodeと互換性のある場合、__STDC_ISO_10646__が事前定義されると定められている。