Developpez.com - C
X

Choisissez d'abord la catégorieensuite la rubrique :

next up previous contents index
Next: Sémantique des expressions Up: Les expressions Previous: Les opérateurs

Sous-sections

Opérateur conversion

 
$\bullet$
Syntaxe :

expression :
$\Rightarrow$ ( type ) expression

$\bullet$
Sémantique : expression est évaluée et convertie dans le type indiqué par type.

Note

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 up previous contents index
Next: Sémantique des expressions Up: Les expressions Previous: Les opérateurs
Bernard Cassagne
1998-12-09
Contacter le responsable de la rubrique C