Bagikan melalui


Deklarasi enumerasi C

Enumerasi terdiri dari satu set bernama konstanta bilangan bulat. Deklarasi jenis enumerasi memberikan nama tag enumerasi (opsional). Selain itu, ini mendefinisikan set pengidentifikasi bilangan bulat bernama (disebut set enumerasi, konstanta enumerator, enumerator, atau anggota). Variabel jenis enumerasi menyimpan salah satu nilai set enumerasi yang ditentukan oleh jenis tersebut.

Variabel jenis enum dapat digunakan dalam ekspresi pengindeksan dan sebagai operan dari semua operator aritmatika dan relasional. Enumerasi memberikan alternatif untuk arahan praprosesor #define dengan keuntungan bahwa nilai dapat dihasilkan untuk Anda dan mematuhi aturan cakupan normal.

Di ANSI C, ekspresi yang menentukan nilai konstanta enumerator selalu memiliki jenis int. Itu berarti penyimpanan yang terkait dengan variabel enumerasi adalah penyimpanan yang diperlukan untuk satu nilai int. Konstanta enumerasi atau nilai jenis enumerasi dapat digunakan di mana saja bahasa C mengizinkan ekspresi bilangan bulat.

Sintaks

enum-specifier:
enumidentifierMemilih { enumerator-list }
enum identifier

enumerator-list:
enumerator
enumerator-list , enumerator

enumerator:
enumeration-constant
enumeration-constant = constant-expression

enumeration-constant:
identifier

identifier opsional memberi nama jenis enumerasi yang ditentukan oleh enumerator-list. Pengidentifikasi ini sering disebut "tag" dari enumerasi yang ditentukan oleh daftar. Penentu jenis menyatakan identifier sebagai tag enumerasi yang ditentukan oleh nonterminal enumerator-list, seperti yang terlihat di sini:

enum identifier
{
    // enumerator-list
}

enumerator-list mendefinisikan anggota set enumerasi.

Jika deklarasi tag terlihat, deklarasi selanjutnya yang menggunakan tag tetapi menghilangkan enumerator-list tentukan jenis enumerasi yang dinyatakan sebelumnya. Tag harus merujuk ke jenis enumerasi yang ditentukan, dan jenis enumerasi tersebut harus berada dalam cakupan saat ini. Karena jenis enumerasi didefinisikan di tempat lain, enumerator-list tidak muncul dalam deklarasi ini. Deklarasi jenis yang berasal dari enumerasi dan typedef deklarasi untuk jenis enumerasi dapat menggunakan tag enumerasi sebelum jenis enumerasi ditentukan.

Masing-masing enumeration-constant dalam enumerator-list memberi nama nilai set enumerasi. Secara default, enumeration-constant pertama dikaitkan dengan nilai 0. enumeration-constant berikutnya dalam daftar dikaitkan dengan nilai ( constant-expression + 1 ), kecuali Anda secara eksplisit mengaitkannya dengan nilai lain. Nama enumeration-constant setara dengan nilainya.

Anda dapat menggunakan enumeration-constant = constant-expression untuk mengambil alih urutan nilai default. Artinya, jika enumeration-constant = constant-expression muncul di enumerator-list, enumeration-constant dikaitkan dengan nilai yang diberikan oleh constant-expression. constant-expression harus memiliki jenis int dan bisa negatif.

Aturan berikut berlaku untuk anggota set enumerasi:

  • Set enumerasi dapat berisi nilai konstanta duplikat. Misalnya, Anda dapat mengaitkan nilai 0 dengan dua pengidentifikasi berbeda, misalnya, anggota bernama null dan zero, dalam set yang sama.

  • Pengidentifikasi dalam daftar enumerasi harus berbeda dari pengidentifikasi lain dalam cakupan yang sama dengan visibilitas yang sama. Hal itu termasuk nama variabel dan pengidentifikasi biasa dalam daftar enumerasi lainnya.

  • Tag enumerasi mematuhi aturan cakupan normal. Tag tersebut harus berbeda dari tag enumerasi, struktur, dan union lainnya dengan visibilitas yang sama.

Contoh

Contoh ini menggambarkan deklarasi enumerasi:

enum DAY            /* Defines an enumeration type    */
{
    saturday,       /* Names day and declares a       */
    sunday = 0,     /* variable named workday with    */
    monday,         /* that type                      */
    tuesday,
    wednesday,      /* wednesday is associated with 3 */
    thursday,
    friday
} workday;

Nilai 0 dikaitkan dengan saturday secara default. Pengidentifikasi sunday secara eksplisit diatur ke 0. Pengidentifikasi yang tersisa diberi nilai 1 hingga 5 secara default.

Dalam contoh ini, nilai dari set DAY ditetapkan ke variabel today.

enum DAY today = wednesday;

Nama konstanta enumerasi digunakan untuk menetapkan nilai. Karena jenis enumerasi DAY sebelumnya dinyatakan, hanya DAY tag enumerasi yang diperlukan.

Untuk secara eksplisit menetapkan nilai bilangan bulat ke variabel jenis data yang dijumlahkan, gunakan jenis cast:

workday = ( enum DAY ) ( day_value - 1 );

Transmisi ini direkomendasikan dalam C tetapi tidak diperlukan.

enum BOOLEAN  /* Declares an enumeration data type called BOOLEAN */
{
    false,     /* false = 0, true = 1 */
    true
};

enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */

Deklarasi ini juga dapat ditentukan sebagai

enum BOOLEAN { false, true } end_flag, match_flag;

atau sebagai

enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;

Contoh yang menggunakan variabel ini mungkin terlihat seperti ini:

if ( match_flag == false )
    {
     .
     .   /* statement */
     .
    }
    end_flag = true;

Jenis data enumerator yang tidak disebutkan namanya juga dapat dideklarasikan. Nama jenis data dihilangkan, tetapi variabel dapat dideklarasikan. Variabel response adalah variabel dari jenis yang ditentukan:

enum { yes, no } response;

Lihat juga

Enumerasi