Aracılığıyla paylaş


union Bildirim

"Birleşim bildirimi", değişken değerleri kümesini ve isteğe bağlı olarak birleşimi adlandıran bir etiket belirtir. Değişken değerleri birleşimin "üyeleri" olarak adlandırılır ve farklı türlere sahip olabilir. Birleşimler, diğer dillerdeki "değişken kayıtlara" benzer.

Sözdizimi

struct-or-union-specifier:
struct-or-union identifier Tercih{struct-declaration-list}
struct-or-union identifier

struct-or-union:
struct
union

struct-declaration-list:
struct-declaration
struct-declaration-list struct-declaration

Birleşim içeriği şu şekilde tanımlanır:

struct-declaration:
specifier-qualifier-list struct-declarator-list ;

specifier-qualifier-list:
type-specifier specifier-qualifier-list Tercih
type-qualifier specifier-qualifier-list Tercih

struct-declarator-list:
struct-declarator
struct-declarator-list , struct-declarator

türüne sahip union bir değişken, bu tür tarafından tanımlanan değerlerden birini depolar. Yapı ve birleşim bildirimlerini aynı kurallar yönetir. Birleşimlerin bit alanları da olabilir.

Birleşimlerin üyeleri eksik bir türe, türe voidveya işlev türüne sahip olamaz. Bu nedenle üyeler birleşimin bir örneği olamaz, ancak bildirilmekte olan birleşim türüne yönelik işaretçiler olabilir.

Birleşim türü bildirimi yalnızca bir şablondur. Değişken bildirilene kadar bellek ayrılmaz.

Uyarı

İki türden bir birleşim bildirilirse ve bir değer depolanırsa, ancak birleşime diğer türle erişilirse, sonuçlar güvenilir değildir. Örneğin, ve int birleşimi float bildirilir. Bir float değer depolanır, ancak program daha sonra değere olarak interişir. Böyle bir durumda, değer değerlerin iç depolama alanına float bağlıdır. Tamsayı değeri güvenilir olmaz.

Örnekler

Birleşim örnekleri aşağıda verilmiştir:

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

Bu örnek, türü olan sign bir birleşim değişkeni tanımlar ve adlı number iki üyesi olan bir değişken bildirir: svar, imzalı bir tamsayı ve uvar, işaretsiz bir tamsayı. Bu bildirim, geçerli değerinin number imzalı veya imzasız bir değer olarak depolanmasını sağlar. Bu birleşim türüyle ilişkilendirilmiş etiket şeklindedir sign.

union               /* Defines a two-dimensional */
{                   /*  array named screen */
    struct
    {
      unsigned int icon : 8;
      unsigned color : 4;
    } window1;
    int screenval;
} screen[25][80];

Dizi screen 2.000 öğe içeriyor. Dizinin her öğesi, iki üyesi olan tek tek bir birleşimdir: window1 ve screenval. Üye window1 , iconcolorve iki bit alanı üyesi olan bir yapıdır. Üye screenval bir int'dir. Herhangi bir zamanda, her birleşim öğesi tarafından temsil edilen veya tarafından screenvalwindow1temsil edilen yapıyı tutarint.

Microsoft'a Özgü

İç içe birleşimler, başka bir yapının veya birleşimin üyesi olduklarında anonim olarak bildirilebilir. Aşağıda adsız bir birleşim örneği verilmişti:

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 */

Birleşimler genellikle belirli bir zamanda birleşimde yer alan veri türünü veren bir alan içeren bir yapı içinde iç içe yerleştirilmiştir. İşte böyle bir birleşim için bir bildirim örneği:

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

Birleşimlere başvurma hakkında bilgi için bkz . Yapı ve Birleşim Üyeleri .

END Microsoft'a Özel

Ayrıca bakınız

Bildirimciler ve Değişken Bildirimleri