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));
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.
Matthieu Moy 2017-02-08