union
Prohlášení
Deklarace sjednocení určuje množinu hodnot proměnných a volitelně značku označující sjednocení. Hodnoty proměnných se nazývají "členové" sjednocení a mohou mít různé typy. Sjednocení se podobají "záznamům variant" v jiných jazycích.
Syntaxe
struct-or-union-specifier
:
struct-or-union
identifier
volit {
struct-declaration-list
}
struct-or-union
identifier
struct-or-union
:
struct
union
struct-declaration-list
:
struct-declaration
struct-declaration-list
struct-declaration
Sjednocovacího obsahu je definován tak, aby byl
struct-declaration
:
specifier-qualifier-list
struct-declarator-list
;
specifier-qualifier-list
:
type-specifier
specifier-qualifier-list
volit
type-qualifier
specifier-qualifier-list
volit
struct-declarator-list
:
struct-declarator
struct-declarator-list
,
struct-declarator
Proměnná s typem union
ukládá jednu z hodnot definovaných tímto typem. Stejná pravidla řídí strukturu a deklarace sjednocení. Sjednocení můžou mít také bitová pole.
Členové sjednocení nemohou mít neúplný typ, typ void
nebo typ funkce. Členové proto nemohou být instancí sjednocení, ale mohou být ukazateli na typ sjednocení, který je deklarován.
Deklarace typu sjednocení je pouze šablona. Paměť není vyhrazená, dokud nebude proměnná deklarována.
Poznámka:
Pokud je deklarována sjednocení dvou typů a jedna hodnota je uložena, ale sjednocení je přístupné s druhým typem, výsledky jsou nespolehlivé. Například sjednocení float
a int
je deklarováno. Hodnota float
je uložena, ale program později přistupuje k hodnotě jako .int
V takové situaci by hodnota závisela na interním úložišti float
hodnot. Celočíselná hodnota by nebyla spolehlivá.
Příklady
Tady jsou příklady sjednocení:
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
Tento příklad definuje sjednocovanou proměnnou s typem sign
a deklaruje proměnnou s názvem number
, která má dva členy: svar
znaménk celé číslo a uvar
celé číslo bez znaménka. Tato deklarace umožňuje uložit aktuální hodnotu number
jako podepsanou nebo nepodepsanou hodnotu. Značka přidružená k tomuto typu sjednocení je sign
.
union /* Defines a two-dimensional */
{ /* array named screen */
struct
{
unsigned int icon : 8;
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
Pole screen
obsahuje 2 000 prvků. Každý prvek pole je individuální sjednocení se dvěma členy: window1
a screenval
. Člen window1
je struktura se dvěma členy bitového pole a icon
color
. Člen screenval
je .int
V každém okamžiku každý sjednocovacího prvku obsahuje int
buď reprezentovaný screenval
, nebo strukturu reprezentovanou window1
.
Specifické pro Microsoft
Vnořené sjednocení lze deklarovat anonymně, když jsou členy jiné struktury nebo sjednocení. Tady je příklad sjednocení bez názvů:
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 */
Sjednocení se často vnořují do struktury, která obsahuje pole, které poskytuje typ dat obsažených ve sjednocení v každém konkrétním okamžiku. Tady je příklad deklarace takové sjednocení:
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
Informace o odkazování na sjednocení najdete v části Členové struktury a sjednocení.
END Microsoft Specific