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
:
enum
identifier
Memilih {
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
danzero
, 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;