Next: Sémantique des expressions
Up: Les expressions
Previous: Les opérateurs
Sous-sections
-
- Syntaxe :
expression :
( type ) expression
-
- Sémantique :
expression est évaluée et convertie dans le type indiqué par
type.
Dans le jargon C, l'opérateur de conversion de type s'appelle un
cast.
Dans le vocabulaire des langages de programmation en général, une conversion
de type s'appelle en anglais une
coertion, que l'on peut traduire par
contrainte ou coercition. Le mot anglais
cast signifie plâtre (pour
maintenir un membre brisé), il donne donc bien une idée de contrainte,
mais c'est quand même un choix bizarre.
Exemples d'utilisation
L'opérateur de conversion est devenu moins utile avec la normalisation
du langage C.
Dans
K&R C, il était utilisé essentiellement pour deux raisons :
- 1.
- à cause de l'absence de pointeur générique void *.
En effet, les procédures d'allocation de mémoire comme malloc étaient
définies par :
extern char * malloc();
ce qui nécessitait d'utiliser l'opérateur de conversion de type à chaque
utilisation :
p1 = (struct s1 *) malloc(sizeof(struct s1));
p2 = (struct s2 *) malloc(sizeof(struct s2));
- 2.
- à cause de l'absence de prototype de fonction qui rendait
impossible la déclaration du type des paramètres des
fonctions externes.
Si une procédure p attendait un paramètre de type float, et si on
désirait lui passer la valeur possédée par la variable i de type
int, il ne fallait pas écrire p(i) mais p((float) i).
Il reste cependant un certain nombre de situations où l'opérateur de conversion
est nécessaire.
En voici un exemple.
Il s'agit d'un
programme qui a pour but de déterminer si l'architecture de la machine
est de type little endian ou big endian.
Il faut regarder l'ordre des octets dans un entier,
d'où la nécessité de l'opérateur de conversion.
Ce programme suppose que les int sont implémentés sur 4 octets.
int i = 0x01020304;
char *p;
p = (char *) &i; /* int * transformé en char * */
if (*p++ == 1 && *p++ == 2 && *p++ == 3 && *p++ == 4 )
printf("big endian\n");
else
{
p = (char *) &i;
if (*p++ == 4 && *p++ == 3 && *p++ == 2 && *p++ == 1 )
printf("little endian\n");
else printf("architecture exotique !!\n");
}
Exécuté sur une machine Sun à processeur
SPARC, ce programme répondra
big endian, exécuté sur un
PC à processeur Intel, il répondra
little endian.
Next: Sémantique des expressions
Up: Les expressions
Previous: Les opérateurs
Bernard Cassagne
1998-12-09