Nan mais si ça peut te rassurer ça a toujours été la merde la gestion des caractères en C du fait qu'on a toujours supposé qu'un char = 1 octet (utilisé à la place d'un type byte / uint8_t manquant).
En C++ avec STL c'est un peu moins la merde car les string sont censées te masquer ça (cf. le template toumoche™ que représente la déclaration de string).
Dans les langages récents le type char est opaque. Tu ne sais pas la taille qu'il a, et tu n'es pas censé faire des opérations arithmétiques dessus, même si c'est possible dans certains à coup de cast. Tu peux te donner les mêmes contraintes en C en faisant ton propre type CHAR, par contre du coup il ne faut plus utiliser les fonctions de la libc...
