Programmer en langage C
224
© Éditions Eyrolles
La norme ne précise pas si la description d’un champ de bits se fait en allant des poids faibles
vers les poids forts ou dans le sens inverse. Ce point dépend donc de l’implémentation et, en
pratique, on rencontre les deux situations (y compris pour différents compilateurs sur une
même machine !). En outre, lorsqu’un champ de bits occupe plusieurs octets, l’ordre dans
lequel ces derniers sont décrits dépend, lui aussi, de l’implémentation.
La taille maximale d’un champ de bits dépend, elle aussi, de l’implémentation. En pratique, on
rencontre fréquemment 16 bits ou 32 bits.
L’emploi des champs de bits est, donc, par nature même, peu ou pas portable. Il doit, par
conséquent, être réservé à des applications très spécifiques.
5 Les unions
L’union, en langage C, permet de faire partager un même emplacement mémoire par des variables de types différents. Cela peut s’avérer utile :
●
pour économiser des emplacements mémoire, en utilisant un même emplacement pendant des
phases différentes d’un même programme ; d’une manière générale, vous verrez que les possibilités de gestion dynamique du langage C résolvent ce problème d’une façon plus pratique ;
●
pour interpréter de plusieurs façons différentes un même motif binaire. Dans ce cas, il sera
alors fréquent que l’union soit elle-même associée à des champs de bits.
Voyez d’abord cet exemple introductif qui n’a d’intérêt que dans une implémentation dans
laquelle les types float et long ont la même taille :
Union entre un entier et un flottant (supposés de même taille)
#include
main()
{
union essai
{ long n ;
float x ;
} u ;
printf ("donnez un nombre réel : ") ;
scanf ("%f", &u.x) ;
printf (" en entier, cela fait : %ld", u.n) ;
}
donnez un nombre réel : 1.23e4
en entier, cela fait : 1178611712
Delannoy Livre.book Page 224 Mercredi, 6. mai 2009 4:26 16
Précédent

- 237/281

Suivant