Déclarations des unions
Une « déclaration d'union » spécifie un ensemble de valeurs variables et, éventuellement, une balise affectation de l'union.Les valeurs de variables sont appelées « membre » de l'union de et peuvent avoir des types.Les unions sont similaires « aux enregistrements variants » dans d'autres langages.
Syntaxe
struct-ou-union-spécificateur:
struct-déclaration-liste } optde**{** d'identificateur de struct-ou-unionidentificateur de struct-ou-union
struct-ou-union:
structunion
struct-déclaration-liste:
struct-déclarationstruct-déclaration de struct-déclaration-liste
Le contenu des unions est défini pour être
struct-déclaration:
struct-déclarateur-liste ; de spécificateur-qualificateur-listespécificateur-qualificateur-liste:
spécificateur-qualificateur-liste de spécificateur de type optspécificateur-qualificateur-liste de type-qualificateur opt
struct-déclarateur-liste:
struct-déclarateurstruct-déclarateur deServeur IIS local de struct-déclarateur-liste
Une variable du type d'union enregistre une des valeurs définies par ce type.Les mêmes règles gouvernent les déclarations de structure et d'union.Les unions peuvent également avoir des champs de bits.
Les membres d'union ne peuvent pas avoir de type incomplet, taper void, ou exécuter le type.Par conséquent les membres ne peuvent pas être une instance de l'union mais peuvent être des pointeurs vers le type union est déclaré.
Une déclaration de type union est un modèle uniquement.La mémoire n'est pas réservée jusqu'à ce que la variable est déclarée.
[!REMARQUE]
Si une union de deux types est déclarée et une valeur est stockée, mais l'union est accessible avec l'autre type, les résultats sont non fiables.par exemple, une union de float et d' int est déclarée.Une valeur float est enregistrée, mais le programme accède par la suite à la valeur comme int.Dans ce cas, la valeur dépend du stockage interne des valeurs float.La valeur entière n'est pas fiable.
Exemples
Voici des exemples d'union :
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
Cet exemple définit une variable des unions avec le type d' sign et déclare une variable nommée number qui possède deux membres : svar, un entier signé, et uvar, un entier non signé.Cette déclaration permet la valeur actuelle d' number à enregistrer en tant que valeur signée ou non signée.La balise associée à ce type 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];
la matrice d' screen contient 2.000 éléments.Chaque élément du tableau est une union individuelle avec deux membres : window1 et screenval.le membre d' window1 est une structure avec deux membres, icon et colorde champ de bits.le membre d' screenval est int.À un moment donné, chaque élément union contient int représentée par screenval ou la structure représentée par window1.
Spécifique à Microsoft
Les unions imbriqués peuvent être déclarés anonyme lorsqu'ils sont membres d'une structure ou union.Il s'agit d'un exemple d'une union inconnue :
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és dans une structure qui inclut un champ donnant le type de données contenu dans une union à un moment donné.C'est un exemple d'une déclaration de cette union :
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
Consultez Structure et membres d'union pour plus d'informations sur le référencement des unions.
détail de FIN Microsoft