Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une « déclaration d’union » spécifie un ensemble de valeurs de variable et, éventuellement, une balise nommant l’union. Les valeurs de variable sont appelées « membres » de l’union et peuvent avoir différents types. Les unions sont similaires aux « enregistrements variant » dans d’autres langues.
Syntaxe
struct-or-union-specifier :
struct-or-union
identifier
opter{struct-declaration-list}
struct-or-union
identifier
struct-or-union :
struct
union
struct-declaration-list :
struct-declaration
struct-declaration-list
struct-declaration
Le contenu de l’union est défini comme étant
struct-declaration :
specifier-qualifier-list
struct-declarator-list
;
specifier-qualifier-list :
type-specifier
specifier-qualifier-list
opter
type-qualifier
specifier-qualifier-list
opter
struct-declarator-list :
struct-declarator
struct-declarator-list
,
struct-declarator
Une variable avec union type stocke l’une des valeurs définies par ce type. Les mêmes règles régissent les déclarations de structure et d’union. Les unions peuvent également avoir des champs de bits.
Les membres d’unions ne peuvent pas avoir de type incomplet, de type voidou de type de fonction. Par conséquent, les membres ne peuvent pas être une instance de l’union, mais peuvent être des pointeurs vers le type d’union déclaré.
Une déclaration de type union est un modèle uniquement. La mémoire n’est pas réservée tant que la variable n’est pas déclarée.
Remarque
Si une union de deux types est déclarée et qu’une valeur est stockée, mais que l’union est accessible avec l’autre type, les résultats ne sont pas fiables. Par exemple, une union de float et int est déclarée. Une float valeur est stockée, mais le programme accède ultérieurement à la valeur en tant que int. Dans ce cas, la valeur dépend du stockage interne des float valeurs. La valeur entière n’est pas fiable.
Exemples
Voici quelques exemples d’unions :
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
Cet exemple définit une variable union avec sign type et déclare une variable nommée number qui a deux membres : svar, un entier signé et uvar, un entier non signé. Cette déclaration permet de stocker la valeur actuelle sous number la forme d’une valeur signée ou non signée. La balise associée à ce type d’union est sign.
union /* Defines a two-dimensional */
{ /* array named screen */
struct
{
unsigned int icon : 8;
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
Le screen tableau contient 2 000 éléments. Chaque élément du tableau est une union individuelle avec deux membres : window1 et screenval. Le window1 membre est une structure avec deux membres de champ binaire, icon et color. Le screenval membre est un int. À tout moment donné, chaque élément union contient l’élément int représenté par screenval ou la structure représentée par window1.
Spécifique à Microsoft
Les unions imbriquées peuvent être déclarées anonymement lorsqu’elles sont membres d’une autre structure ou union. Voici un exemple d’union sans nom :
struct str
{
int a, b;
union /* Unnamed union */
{
char c[4];
long l;
float f;
};
char c_array[10];
} my_str;
.
.
.
my_str.l == 0L; /* A reference to a field in the my_str union */
Les unions sont souvent imbriquées dans une structure qui inclut un champ donnant le type de données contenues dans l’union à un moment donné. Voici un exemple de déclaration pour une telle union :
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
Pour plus d’informations sur le référencement des syndicats, consultez Structure et membres de l’union .
FIN de la section spécifique à Microsoft