Sdílet prostřednictvím


Deklarace sjednocení

„Deklarace sjednocení“ určuje sadu hodnot proměnných a případně značku pro pojmenování tohoto sjednocení.Hodnoty proměnných jsou označovány jako „členové“ sjednocení a mohou mít různé typy.Sjednocení jsou podobné jako „proměnné záznamy“ v jiných jazycích.

Syntax

  • specifikátor-struktury-nebo-sjednocení:
    identifikátor-struktury-nebo-sjednocení volitelné**{** seznam-deklarace-struktury }

    identifikátor-struktury-nebo-sjednocení

  • struktura-nebo-sjednocení:
    struct

    sjednocení

  • seznam-deklarace-struktury:
    deklarace-struktury

    seznam-deklarace-struktury deklarace-struktury

Obsah sjednocení je definován

  • deklarace-struktury:
    seznam-kvalifikátorů-specifikátoru seznam-deklarátorů-struktury ;

  • seznam-kvalifikátorů-specifikátoru:
    specifikátor-typu seznam-kvalifikátorů-specifikátoru volitelné

    kvalifikátor-typu seznam-kvalifikátorů-specifikátoru volitelné

  • seznam-deklarátorů-struktury:
    deklarátor-struktury:

    seznam-deklarátorů-struktury , deklarátor-struktury

Proměnná typu sjednocení ukládá jednu z hodnot definovaných tímto typem.Stejnými pravidly se řídí deklarace struktury a sjednocení.Sjednocení mohou mít také bitová pole.

Členové sjednocení nemohou mít neúplný typ, typ void nebo typ funkce.Proto členové nemohou tvořit instanci sjednocení, ale mohou být ukazateli na deklarovaný typ sjednocení.

Deklarace typu sjednocení je pouze šablona.Paměť není vyhrazena, dokud není proměnná deklarována.

[!POZNÁMKA]

Pokud je deklarováno sjednocení dvou typů a jedna hodnota je uložena, ale je toto sjednocení přistupováno jiným typem, jsou výsledky nespolehlivé.Například, je deklarováno sjednocení typů float a int.Je uložena hodnota typu float, ale program později k hodnotě přistupuje jako k typu int.V takovém případě hodnota závisí na vnitřním úložišti hodnot typu float.Celočíselná hodnota by neměla být spolehlivá.

Příklady

Následující ukázky jsou příklady sjednocení:

union sign   /* A definition and a declaration */
{
    int svar;
    unsigned uvar;
} number;

Tento příklad definuje proměnnou sjednocení s typem sign a deklaruje proměnnou s názvem number, která má dva členy: člen svar znaménkového celočíselného typu a člen uvar bezznaménkového celočíselného typu.Tato deklarace umožňuje uložit aktuální hodnotu proměnné number buď jako znaménkovou nebo bezznaménkovou 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 2000 prvků.Každý prvek pole je jednotlivé sjednocení se dvěma členy: window1 a screenval.Člen window1 je struktura se dvěma členy bitového pole, icon a color.Člen screenval je typu int.V každém okamžiku každý prvek sjednocení uchovává buď typ int reprezentovaný členem screenval nebo strukturu reprezentovanou členem window1.

Specifické pro produkty společnosti Microsoft

Vnořené sjednocení lze deklarovat anonymně, pokud se jedná o členy jiné struktury nebo sjednocení.Toto je příklad sjednocení bez názvu:

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í jsou často vnořeny ve strukturách, které zahrnují pole daného typu dat obsaženého ve sjednocení v jakémkoli čase.Toto je příklad deklarace takového sjednocení:

struct x
{
    int type_tag;
    union
    {
      int x;
      float y;
    }
}

Další informace o odkazování sjednocení naleznete v tématu Členy struktury a sjednocení.

Specifické pro produkty společnosti Microsoft - konec

Viz také

Koncepty

Deklarátor a deklarace proměnné