Partager via


union Déclarations

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

Voir aussi

Déclarateurs et déclarations de variables