« Programmation C/Types de base » : différence entre les versions

Contenu supprimé Contenu ajouté
m typographie française
mAucun résumé des modifications
Ligne 1 :
[[Catégorie:<noinclude>{{Programmation C (livre)]]}}</noinclude>
<noinclude>{{Programmation C}}
</noinclude>
Le C est un langage typé statiquement : chaque variable, chaque constante et chaque expression, a un type défini à la compilation. Le langage lui-même fournit des types permettant de manipuler des nombres ([[Programmation C Types de base#Entiers|entiers]], [[Programmation C Types de base#Réels|réels]] ou complexes) ou des [[Programmation C Types de base#Caractères|caractères]] (eux-mêmes étant manipulés comme des entiers spéciaux), et permet de construire des types plus complexes à partir de ces premiers, par exemple en groupant des données de même type en [[Programmation C/Tableaux|tableaux]], ou des données de types différents dans des [[Programmation C Types avancés#Structures|structures]]. Dans ce chapitre, nous étudierons les types de base fournis par le C, l'étude des types complexes étant faite dans la suite du livre.
 
Ligne 173 ⟶ 171 :
domaine(char) ≤ domaine(short) ≤ domaine(int) ≤ domaine(long) ≤ domaine(long long)
 
Cela signifie que toutes les valeurs possibles pour une variable du type <tt>char</tt> sont aussi utilisables pour les autres types ; mais aussi que, par exemple, une valeur valide pour le type <tt>int</tt> peut ne pas être représentable dans une variable de type <tt>short</tt>.
 
Si vous ne savez pas quel type donner à une variable de type entier, le type <tt>int</tt> est par défaut le meilleur choix (à condition que votre donnée ne dépasse pas 2<sup>15</sup>-1) : ce type est la plupart du temps représenté au niveau matériel par un « mot machine », c'est-à-dire qu'il est adapté à la taille que la machine peut traiter directement (il fait usuellement 32 bits sur un PC 32 bits, par exemple). Cela permet un traitement plus rapide par le matériel. De plus, beaucoup de bibliothèques (que ce soit celle fournie par le langage C ou d'autres) utilisent ce type pour passer des entiers, ce qui fait que l'utilisation de ces bibliothèques sera plus aisée.
Ligne 370 ⟶ 368 :
 
=== Valeur des caractères-octets ===
La valeur représentée par cette constante est néanmoins dépendante des conventions de codages de caractères employées. A l'origine ces conventions étaient connues du système ; aujourd'hui, même si dans une écrasante majorité des cas, on se retrouvera avec un jeu de caractères augmentant l'ASCII et donc l'ISO-646.
La code ASCII définit 96 glyphes de caractères portant les numéros 32 à 126, bien loin des milliers de caractères nécessaires pour les logiciels fonctionnant sur la planète entière et dans des langues nombreuses<ref name="codeCaracteres">En occident, en-dehors des codages compatibles avec ASCII, on ne rencontre guère en pratique que la famille de jeux de caractères [[w:EBCDIC|EBCDIC]], utilisée sur des systèmes IBM et quelques mainframes.</ref>. Cet ensemble est à peine suffisant pour couvrir l'anglais alors que plusieurs langues latines étaient visées à l'époque où l'ASCII et l'ISO-646 ont été définis, si bien que de nombreuses extensions sont par la suite apparues.
 
Par exemple le caractère « œ » (ligature du o et du e) a pour valeur :
* 189 dans le jeu de caractères ISO-8859-15 (principalement utilisé pour les langues latines d'Europe, sous Unix) ;
* 156 sur certaines variantes du jeu de caractères Windows 1252 (principalement utilisé pour les langues latines d'Europe, sous Windows) ;;
* 0xc5, 0x93 (deux octets, donc deux <code>char</code>) en l'UTF-8 ;
* 207 avec l'encodage Mac Roman (Mac OS 9 et antérieur) ;
Ligne 430 ⟶ 428 :
|}
De plus, on peut écrire n'importe quelle valeur de caractère avec les expressions suivantes :
*<tt>'\x''HH'''</tt>, où chaque <tt>''H''</tt> représente un chiffre hexadécimal correspondant au code du caractère. Par exemple, <tt>'\x61'</tt> représente le caractère <tt>'a'</tt> (minuscule) en ASCII (car 97 = 6 * 16 + 1)&nbsp; ;
*<tt>"\xc5\x93"</tt> représente le caractère œ en UTF-8.
*<tt>'\''oOO'''</tt>, où chaque <tt>''O''</tt> représente un chiffre octal correspondant au code du caractère.