Sintaksis
enumEnumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
… ,
Enumeration_Constant_Element-n,
;
Nilai default Enumeration_Constant_Element-1 adalah 0, nilai Enumeration_Constant_Element-2 adalah 1, nilai Enumeration_Constant_Element-3 adalah 2, dan nilai Enumeration_Constant_Element-n adalah (n-1).
Menyelam Jauh ke dalam Enum
Sekarang, karena kita mengetahui sintaks untuk mendefinisikan tipe enumerasi, mari kita lihat sebuah contoh:
enum KesalahanIO_ERROR,
DISK_ERROR,
NETWORK_ERROR
;
Kata kunci “enum” harus selalu digunakan untuk menentukan jenis enumerasi. Jadi, setiap kali Anda ingin menentukan jenis enumerasi, Anda harus menggunakan kata kunci “enum” sebelumnya
Dalam contoh di atas, kompiler akan menetapkan IO_ERROR ke nilai integral: 0, DISK_ERROR ke nilai integral: 1 dan NETWORK_ERROR ke nilai integral: 2. Secara default, elemen enum pertama selalu diberi nilai 0, elemen enum berikutnya diberi nilai 1, dan seterusnya.
Perilaku default ini dapat diubah jika perlu dengan menetapkan nilai integral konstan secara eksplisit, sebagai berikut:
enum KesalahanIO_ERROR = 2,
DISK_ERROR,
JARINGAN_ERROR = 8 ,
PRINT_ERROR
;
Dalam hal ini, IO_ERROR secara eksplisit ditetapkan ke nilai 2 oleh programmer, DISK_ERROR ditugaskan ke nilai 3 oleh compiler, NETWORK_ERROR secara eksplisit ditetapkan ke nilai 8 oleh programmer, dan PRINT_ERROR ditugaskan ke berikutnya nilai integral dari elemen enum sebelumnya NETWORK_ERROR (i.e., 9) oleh kompiler.
Jadi, Anda sekarang mengerti bagaimana mendefinisikan tipe enumerasi yang ditentukan pengguna di C. Apakah mungkin untuk mendeklarasikan variabel tipe enum (karena kami dapat mendeklarasikan variabel tipe integer)? Ya itu! Anda dapat mendeklarasikan variabel enum sebagai berikut:
enum Kesalahan Hw_Error;Sekali lagi, “enum” adalah kata kunci di sini, “Error” adalah jenis enum, dan “Hw_Error” adalah variabel enum.
Sekarang kita akan melihat contoh berikut untuk memahami berbagai penggunaan enum:
- Contoh 1: Penggunaan definisi enum default
- Contoh 2: Penggunaan definisi enum khusus
- Contoh 3: definisi enum menggunakan ekspresi konstan
- Contoh 4: enum lingkup
Contoh 1: Penggunaan Definisi enum default
Dalam contoh ini, Anda akan belajar bagaimana mendefinisikan tipe enumerasi dengan nilai konstanta default. Kompiler akan menangani penetapan nilai default ke elemen enum. Di bawah ini, Anda akan melihat contoh program dan output yang sesuai.
#termasuk/* Tentukan tipe enum */
enum Kesalahan
IO_ERROR,
DISK_ERROR,
NETWORK_ERROR
;
int utama()
enum Kesalahan Hw_Error; /* Membuat variabel enum*/
printf("Setel Hw_Error ke IO_ERROR\n");
Hw_Error = IO_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke DISK_ERROR\n");
Hw_Error = DISK_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke NETWORK_ERROR\n");
Hw_Error = NETWORK_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
kembali 0;
Contoh 2: Penggunaan Definisi enum Kustom
Dalam contoh ini, Anda akan belajar cara mendefinisikan tipe enumerasi dengan nilai konstanta khusus. Juga, contoh ini akan membantu Anda memahami bagaimana inisialisasi konstanta kustom dapat dilakukan dalam urutan acak apa pun. Dalam contoh ini, kami telah secara eksplisit mendefinisikan nilai konstan untuk 1st dan 3rd elemen enum (i.e., IO_ERROR dan NETWORK_ERROR, masing-masing), tetapi kami telah melewatkan inisialisasi eksplisit untuk 2dan dan 4ini elemen. Sekarang tanggung jawab kompiler untuk menetapkan nilai default ke 2dan dan 4ini elemen enum (i.e., DISK_ERROR dan PRINT_ERROR, masing-masing). DISK_ERROR akan ditetapkan ke nilai 3 dan PRINT_ERROR akan ditetapkan ke nilai 9. Di bawah ini, Anda akan melihat contoh program dan outputnya.
#termasuk/* Tentukan jenis enum - Inisialisasi kustom*/
enum Kesalahan
IO_ERROR = 2,
DISK_ERROR,
JARINGAN_ERROR = 8,
PRINT_ERROR
;
int utama()
/* Deklarasi variabel enum*/
enum Kesalahan Hw_Error;
printf("Setel Hw_Error ke IO_ERROR\n");
Hw_Error = IO_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke DISK_ERROR\n");
Hw_Error = DISK_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke NETWORK_ERROR\n");
Hw_Error = NETWORK_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke PRINT_ERROR\n");
Hw_Error = PRINT_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
kembali 0;
Contoh 3: Definisi Enum Menggunakan Ekspresi Konstan
Dalam contoh ini, Anda akan belajar bagaimana menggunakan ekspresi konstanta untuk menentukan nilai konstan untuk elemen enumum.
#termasuk/* Tentukan tipe enum - inisialisasi khusus menggunakan ekspresi konstan
ekspresi konstan digunakan di sini jika:
Sebuah. IO_ERROR dan
b. NETWORK_ERROR
Ini adalah cara yang tidak biasa untuk mendefinisikan elemen enum; namun, ini
program menunjukkan bahwa cara inisialisasi elemen enum ini dimungkinkan di c.
*/
enum Kesalahan
IO_ERROR = 1 + 2 * 3 + 4,
DISK_ERROR,
NETWORK_ERROR = 2 == 2,
PRINT_ERROR
;
int utama()
/* Deklarasi variabel enum*/
enum Kesalahan Hw_Error;
printf("Setel Hw_Error ke IO_ERROR\n");
Hw_Error = IO_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke DISK_ERROR\n");
Hw_Error = DISK_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke NETWORK_ERROR\n");
Hw_Error = NETWORK_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke PRINT_ERROR\n");
Hw_Error = PRINT_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
kembali 0;
Contoh 4: enum Lingkup
Dalam contoh ini, Anda akan mempelajari cara kerja aturan pelingkupan untuk enum. MAKRO (#define) dapat digunakan untuk mendefinisikan konstanta alih-alih enum, tetapi aturan pelingkupan tidak berfungsi untuk MAKRO.
#termasukint utama()
/* Tentukan tipe enum */
enum Kesalahan_1
IO_ERROR = 10,
DISK_ERROR,
JARINGAN_ERROR = 3,
PRINT_ERROR
;
/* Mendefinisikan tipe enum di inner scope*/
enum Kesalahan_1
IO_ERROR = 20,
DISK_ERROR,
JARINGAN_ERROR = 35,
PRINT_ERROR
;
/* Deklarasi variabel enum*/
enum Error_1 Hw_Error;
printf("Setel Hw_Error ke IO_ERROR\n");
Hw_Error = IO_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke DISK_ERROR\n");
Hw_Error = DISK_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke NETWORK_ERROR\n");
Hw_Error = NETWORK_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
printf("\nSetel Hw_Error ke PRINT_ERROR\n");
Hw_Error = PRINT_ERROR;
printf("Nilai Hw_Error = %d \n",Hw_Error);
kembali 0;
Perbandingan Antara enum dan makro
enum | Makro |
Aturan pelingkupan berlaku untuk enum. | Aturan pelingkupan tidak berlaku untuk Makro. |
Penetapan nilai Enum default terjadi secara otomatis. Enum sangat membantu dalam mendefinisikan sejumlah besar konstanta. Kompiler mengambil inisialisasi nilai konstan default. | Nilai konstanta makro harus selalu disebutkan secara eksplisit oleh programmer. Ini bisa menjadi proses yang membosankan untuk sejumlah besar konstanta karena programmer harus selalu secara manual mendefinisikan setiap nilai konstan saat mendefinisikan Makro. |
Kesimpulan
Program enum di C dapat dianggap sebagai metode opsional untuk program mandiri atau proyek berukuran kecil karena programmer selalu dapat menggunakan makro daripada enum. Namun, programmer berpengalaman cenderung menggunakan enum daripada makro untuk proyek pengembangan perangkat lunak skala besar large. Ini membantu dalam menulis program yang bersih dan mudah dibaca.