© Éditions Eyrolles
225
chapitre n° 13
Les possibilités du langage C proches de la machine
La déclaration :
union essai
{ long n ;
float x ;
} u ;
réserve un emplacement dont le nombre de bits correspond à la taille (ici supposée commune)
d’un long ou d’un float qui pourra être considéré tantôt comme un entier long qu’on désignera alors par u.n, tantôt comme un flottant (float) qu’on désignera alors par u.x.
D’une manière générale, la syntaxe de la description d’une union est analogue à celle d’une
structure. Elle possède un nom de modèle (ici essai, nous aurions d’ailleurs pu l’omettre) ;
celui-ci peut être ensuite utilisé pour définir d’autres variables de ce type. Par exemple, dans
notre précédent programme, nous pourrions déclarer d’autres objets du même type que u par :
union essai z, truc ;
Par ailleurs, il est possible de réaliser une union portant sur plus de deux objets ; d’autre part,
chaque objet peut être non seulement d’un type de base (comme dans notre exemple), mais
également de type structure. En voici un exemple dans lequel nous réalisons une union entre
une structure etat telle que nous l’avions définie dans le paragraphe précédent et un entier
(cela n’aura d’intérêt que dans des implémentations où le type int occupe 16 bits).
struct etat
{ unsigned pret : 1 ;
unsigned ok1 : 1 ;
int donnee1
: 5 ;
int
: 3 ;
unsigned ok2 : 1 ;
int donnee2
: 4 ;
} ;
union
{ int valeur ;
struct etat bits ;
} mot ;
Notez qu’ici nous n’avons pas donné de nom au modèle d’union et nous y avons déclaré directement une variable mot.
Avec ces déclarations, il est alors possible, par exemple, d’accéder à la valeur de mot, considéré comme un entier, en la désignant par :
mot.valeur
Delannoy Livre.book Page 225 Mercredi, 6. mai 2009 4:26 16
Précédent

- 238/281

Suivant