Les situations de la conversion de type
En C, les situations ou se produisent les conversions sont les suivantes :
1. une valeur d’un certain type est utilisée dans un contexte qui en requiert un autre :
– passage de paramètre : le paramètre effectif n’a pas le type du paramètre formel (c’était le cas dans l’exemple précédent);
– affectation : la valeur à affecter n’a pas le même type que la variable ;
– valeur rendue par une fonction : l’opérande de return n’a pas le type indiqué dans la déclaration de la fonction.
2. opérateur de conversion : le programmeur demande explicitement une conversion.
3. un opérateur a des opérandes de types différents.
Dans ce dernier cas, et contrairement aux deux cas précédents, c’est le compilateur qui effectue la conversion selon des règles soigneusement définies qui sont détaillées dans les deux paragraphes qui suivent.
La règle de ”promotion des entiers”
Cette règle est appliquée aux opérandes des opérateurs unaires + et -, ainsi qu’aux opérateurs binaires de décalage << et >> et dans les conversions arithmétiques habituelles, abordées au §2.4.3. Elle a pour but d’amener les ”petits entiers” à la taille des int.
Ainsi, toute opérande de type char, unsigned char, short , unsigned short ou champs de bits sur les opérateurs précédent est automatiquement convertie en int (ou en un signe dint si le type int ne permet pas de représenter l’opérande).
Les conversions arithmétiques habituelles
Cette règle est appliquée à tous les opérateurs arithmétiques binaires, exceptés les opérateurs de décalage << et >> et les seconde et troisième opérandes de l’opérateur ?:.
La règles qui s’applique est la suivante :
Dans le cas d’opérandes entières, on applique déjà la règle de promotion des entiers, ce qui permet de se débarrasser des petits entiers. Ensuite, si les opérandes sont toujours de types différents, on les convertit dans le type le plus haut dans la hiérarchie exposée dans la figure 2.4.
Cours langage C (696 KO) (Cours PDF)