Bagikan melalui


union Deklarasi

"Deklarasi serikat pekerja" menentukan satu set nilai variabel dan, opsional, tag yang menamai gabungan. Nilai variabel disebut "anggota" dari gabungan dan dapat memiliki tipe yang berbeda. Gabungan mirip dengan "catatan varian" dalam bahasa lain.

Sintaks

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

struct-or-union:
struct
union

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

Konten serikat didefinisikan sebagai

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

specifier-qualifier-list:
type-specifierspecifier-qualifier-listMemilih
type-qualifierspecifier-qualifier-listMemilih

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

Variabel dengan tipe union menyimpan salah satu nilai yang ditentukan oleh tipe tersebut. Aturan yang sama mengatur struktur dan deklarasi gabungan. Gabungan 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 tipe gabungan adalah templat saja. Memori tidak dicadangkan sampai variabel dideklarasikan.

Catatan

Jika gabungan dua tipe dideklarasikan dan satu nilai disimpan, tetapi gabungan diakses dengan tipe lain, hasilnya tidak dapat diandalkan. Misalnya, gabungan dari float dan int dideklarasikan. Nilai float disimpan, tetapi program selanjutnya akan mengakses nilai sebagai int. Dalam situasi seperti ini, nilainya akan bergantung pada penyimpanan internal dari nilai float. Nilai bilangan bulat tersebut tidak akan dapat diandalkan.

Contoh

Berikut adalah contoh gabungan:

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

Contoh ini mendefinisikan variabel gabungan dengan tipe sign 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 yang tidak ditandatangani. Tag yang terkait dengan tipe gabungan 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 gabungan individu dengan dua anggota: window1 dan screenval. Anggota window1 adalah struktur dengan dua anggota bidang bit, icon dan color. Anggotanya screenval adalah int. Pada waktu tertentu, setiap elemen gabungan memegang int yang diwakili oleh screenval atau struktur yang diwakili oleh window1.

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

Gabungan sering ditumpuk dalam struktur yang mencakup bidang yang memberikan tipe data yang terkandung dalam gabungan 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 Gabungan untuk informasi tentang referensi gabungan.

END Khusus Microsoft

Lihat juga

Deklarator dan Deklarasi Variabel