Bagikan melalui


union Deklarasi

"Deklarasi serikat" menentukan sekumpulan nilai variabel dan, secara opsional, tag yang menamai union. Nilai variabel disebut "anggota" dari serikat dan dapat memiliki jenis yang berbeda. Unions mirip dengan "rekaman varian" dalam bahasa lain.

Sintaksis

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

struct-or-union:
struct
union

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

Konten gabungan didefinisikan

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

specifier-qualifier-list:
type-specifier specifier-qualifier-list Memilih
type-qualifier specifier-qualifier-list Memilih

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

Variabel dengan union jenis menyimpan salah satu nilai yang ditentukan oleh jenis tersebut. Aturan yang sama mengatur struktur dan deklarasi serikat. Serikat juga dapat memiliki bidang bit.

Anggota serikat tidak boleh memiliki jenis, jenis void, atau jenis fungsi yang tidak lengkap. Oleh karena itu anggota tidak dapat menjadi instans serikat tetapi dapat menjadi penunjuk ke jenis serikat pekerja yang dideklarasikan.

Deklarasi jenis serikat adalah templat saja. Memori tidak dicadangkan sampai variabel dideklarasikan.

Nota

Jika gabungan dua jenis dideklarasikan dan satu nilai disimpan, tetapi gabungan diakses dengan jenis lain, hasilnya tidak dapat diandalkan. Misalnya, serikat float dan int dinyatakan. Nilai float disimpan, tetapi program nantinya mengakses nilai sebagai int. Dalam situasi seperti itu, nilainya akan bergantung pada penyimpanan float internal nilai. Nilai bilangan bulat tidak akan dapat diandalkan.

Contoh

Berikut ini adalah contoh serikat:

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

Contoh ini mendefinisikan variabel union dengan sign jenis dan mendeklarasikan variabel bernama number yang memiliki dua anggota: svar, bilangan bulat yang ditandatangani, dan uvar, bilangan bulat yang tidak ditandatangani. Deklarasi ini memungkinkan nilai number saat ini disimpan sebagai nilai yang ditandatangani atau tidak ditandatangani. Tag yang terkait dengan jenis serikat ini adalah sign.

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

Array screen berisi 2.000 elemen. Setiap elemen array adalah serikat individu dengan dua anggota: window1 dan screenval. Anggota window1 adalah struktur dengan dua anggota bit-field, icon dan color. Anggota screenval adalah int. Pada waktu tertentu, setiap elemen serikat memegang baik yang int diwakili oleh screenval atau struktur yang diwakili oleh window1.

Khusus untuk Microsoft

Serikat berlapis dapat dinyatakan secara anonim saat mereka menjadi anggota struktur atau serikat kerja lain. Berikut adalah contoh serikat tanpa nama:

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

Serikat kerja sering disarangkan dalam struktur yang mencakup bidang yang memberikan jenis data yang terkandung dalam serikat pada waktu tertentu. Berikut adalah contoh deklarasi untuk serikat seperti itu:

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

Lihat Anggota Struktur dan Union untuk informasi tentang merujuk serikat pekerja.

END Khusus Microsoft

Lihat juga

Deklarasi dan Deklarasi Variabel