Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En "unionsdeklaration" anger en uppsättning variabelvärden och, om du vill, en tagg som namnger unionen. Variabelvärdena kallas "medlemmar" i unionen och kan ha olika typer. Fackföreningar liknar "variantposter" på andra språk.
Syntax
struct-or-union-specifier:
struct-or-union
identifier
välja{struct-declaration-list}
struct-or-union
identifier
struct-or-union:
struct
union
struct-declaration-list:
struct-declaration
struct-declaration-list
struct-declaration
Unionsinnehållet definieras som
struct-declaration:
specifier-qualifier-list
struct-declarator-list
;
specifier-qualifier-list:
type-specifier
specifier-qualifier-list
välja
type-qualifier
specifier-qualifier-list
välja
struct-declarator-list:
struct-declarator
struct-declarator-list
,
struct-declarator
En variabel med union typen lagrar ett av de värden som definierats av den typen. Samma regler styr struktur- och fackliga deklarationer. Unioner kan också ha bitfält.
Medlemmar i fackföreningar kan inte ha en ofullständig typ, typ voideller funktionstyp. Därför kan medlemmar inte vara en instans av facket utan kan vara pekare på den unionstyp som deklareras.
En deklaration av unionstyp är endast en mall. Minnet är inte reserverat förrän variabeln har deklarerats.
Anmärkning
Om en union av två typer deklareras och ett värde lagras, men unionen nås med den andra typen, är resultatet otillförlitligt. Till exempel deklareras en union av float och int . Ett float värde lagras, men programmet kommer senare åt värdet som en int. I en sådan situation skulle värdet vara beroende av den interna lagringen av float värden. Heltalsvärdet skulle inte vara tillförlitligt.
Exempel
Följande är exempel på fackföreningar:
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
Det här exemplet definierar en unionsvariabel med sign typen och deklarerar en variabel med namnet number som har två medlemmar: svar, ett signerat heltal och uvar, ett osignerat heltal. Med den här deklarationen kan det aktuella värdet number lagras som antingen ett signerat eller ett osignerat värde. Taggen som är associerad med den här unionstypen är sign.
union /* Defines a two-dimensional */
{ /* array named screen */
struct
{
unsigned int icon : 8;
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
Matrisen screen innehåller 2 000 element. Varje element i matrisen är en enskild union med två medlemmar: window1 och screenval. Medlemmen window1 är en struktur med två bitfältsmedlemmar icon och color. Medlemmen screenval är en int. Vid varje given tidpunkt innehåller varje unionselement antingen den int som representeras av screenval eller strukturen som representeras av window1.
Microsoft-specifik
Kapslade fackföreningar kan deklareras anonymt när de är medlemmar i en annan struktur eller union. Här är ett exempel på en namnlös union:
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 */
Unioner är ofta kapslade i en struktur som innehåller ett fält som ger den typ av data som ingår i unionen vid en viss tidpunkt. Här är ett exempel på en förklaring för en sådan union:
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
Se Struktur- och unionsmedlemmar för information om att referera till fackföreningar.
Avsluta Microsoft Specifik