Selon le standard C, du type wchar_t
est « capable de représenter tous les caractères de la localisation en cours ». La norme ne dit pas quel est le codage pour wchar_t
. En fait, les limites sur WCHAR_MIN
et WCHAR_MAX
sont [0
, 255
] ou [-127, 127], selon que wchar_t
est non signé ou signé.
Un caractère multi-octets peut utiliser plusieurs octets. Une chaîne multi-octets est composée d'un ou de plusieurs caractères multi-octets. Dans une chaîne multi-octets, chaque caractère n'a pas nécessairement le même nombre d'octets (UTF-8 est un exemple). Considérant que, un objet de type wchar_t
a une taille fixe (dans une implémentation donnée, bien sûr).
En aparté, je peux aussi trouver ce qui suit dans ma copie du projet C99:
__STDC_ISO_10646__
Une constante entière de la forme yyyymmL
(par exemple, 199712L
). Si ce symbole est défini, chaque caractère de l'ensemble Unicode requis, lorsqu'il est stocké dans un objet de type wchar_t
, a la même valeur que l'identificateur court de ce caractère. L'ensemble Unicode requis comprend tous les caractères définis par l'ISO/CEI 10646, ainsi que tous les amendements et corrigenda techniques, pour l'année et le mois spécifiés.
Donc, si je comprends bien, si __STDC_ISO_10646__
est définie, wchar_t
peut stocker des caractères Unicode.
Un "caractère large" est un 'wchar_t'. – kennytm