« Programmation C++/Les types de base et les déclarations » : différence entre les versions

Contenu supprimé Contenu ajouté
Sigma 7 (discussion | contributions)
→‎Les caractères : supportant n'a pas de sens et ne veux strictement rien dire!
Ligne 72 :
 
=== Les caractères ===
Le caractère est l'élément de base de tout texte et donc sans doute de toute pensée. Les changements de l'informatique ont conduit à différentes approches pour représenter un caractère sur cinq, sept, huit, seize, dix-sept ou trente-deux bits.
 
Aujourd'hui, les deux types incontournables sont le type char hérité du C, et ceux relatifs à Unicode.
 
==== Le type char ====
Il s'agit du type usuelhistorique pour représenter un caractère. Il est hérité du langage C. Aucun système de représentation n'est imposé pour les caractères et on utilise en général des dérivés du code ASCII (qui est un code sept bits). {{refnec|Un caractère doit juste être codé sur au moins 8 bits.}} Il est assez usuel toutefois d'utiliser exactement 8 bits pour représenter un char.<br/>
Usuellement, le type char est exactement 8 bits, ce qui fait que c'est le seul type utilisé pour représenter un octet, créant ainsi une confusion entre caractère et octet.
Le chapitre suivant s'intéresse au huitième bit.
 
'''Exemple :'''
<source lang="cpp">
Ligne 89 ⟶ 96 :
</source>
On récupère alors dans a le codage du caractère 'W'. On récupérera donc en général le code ASCII de 'W' dans la variable a.
 
Aujourd'hui, il est désuet de considérer que l'on code tous caractères sur un seul char. Le type char reste cependant incontournable car il est souvent utilisé pour désigner un octet.
 
==== Les types signed char et unsigned char ====
Lorsqu'on transfère un char dans un int, peut-on récupérer une valeur négative ? La réponse est oui si on utilise le type '''signed char''' et non si on utilise le type '''unsigned char'''. Ces types peuvent être utile losqu'on manipule des caractères non ASCII.
 
Pour les donénes de type char, lorsque ni signed ni unsigned ne sont précisés, le choix entre les deux est fait par le compilateur.
Dans tous les cas à l'époque ou seuls les codages ASCII et autre codages ISO-646 était utilisé cela n'avait pas d'importance.
 
Aujourd'hui cependant, quasiment tous les codages de caractères utilisent a minima huit bits. C'est notamment le cas d'[[UTF-8]]. L'éventuel bit de signe doit donc être considéré pour permettre la portabilité diu logiciel.
 
 
==== Le type wchar_t ====
Ce type de caractère n'existe qu'avec les compilateurs supportant l'Unicode (jeu de caractère internationnal standard couvrant les langues du monde entier). Ces caractères sont stockés sur 2 octets ou 4.
Les valeurs constantes de caractère (entre simple quote) ou de chaîne de caractères (entre double quote) doivent alors être précédées du caractère <tt>L</tt>.
 
Exemple :
<source lang="cpp">
wchar_t a = L'é'; // caractère 'é' unicode(16 ou 32 bits);
wchar_t[] chaine = L"Bonjour, monde !"; // chaîne de caractère unicode
</source>
 
Ce type présente le problème de ne pas être standard: certaines implémentation n'offrent que 16 bits soit une portion limitée des caractères Unicode.
==== Unicode ou non ====
 
Certaines API C++ telle que Visual C++ sous Windows permettent de créer des applications supportant unicode ou non. Pour cela le type <tt>TCHAR</tt> est un type de caractère que le compilateur remplace par <tt>char<tt> ou <tt>wchar_t</tt> selon l'option Unicode. Dans ce cas, les valeurs constantes de chaînes et de caractères doivent être encadrées par la macro <tt>_T</tt>. Cette macro peut alors faire précéder les constantes d'un caractère <tt>L</tt> ou non.
==== API exceptionnellement Unicode ====
Certaines API C++ telle que Visual C++ sous Windows permettentsont deparamètrables créerpar desune applicationsoption supportantdite ''unicode ou non''. Pour cela elles se basent sur le type de caractère<tt>TCHAR</tt> est un type de caractère que le compilateur interprète (en fait remplace) par <tt>char<tt> ou <tt>wchar_t</tt> selon l'option Unicode. Dans ce cas, les valeurs constantes de chaînes et de caractères doivent être encadrées par la macro <tt>_T</tt>. Cette macro peut alors faire précéder les constantes d'un caractère <tt>L</tt> ou non.
 
Exemple :
<source lang="cpp">
TCHAR a = _T('é'); // caractère 'é' unicode ou asciihuit bits;
TCHAR[] chaine = _T("Bonjour, monde !"); // chaîne de caractère unicode ou ascii (huit bits)
</source>