Sdílet prostřednictvím


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-unionidentifiervolit { 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-specifierspecifier-qualifier-listvolit
type-qualifierspecifier-qualifier-listvolit

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 voidnebo 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: svarznaménk celé číslo a uvarcelé čí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

Viz také

Deklarátor a deklarace proměnné