Cara menggunakan enum dalam Bahasa C

How Use Enum C Language



Program enum dalam bahasa pemrograman C digunakan untuk mendefinisikan nilai konstanta integral, yang sangat membantu dalam menulis program yang bersih dan mudah dibaca. Pemrogram biasanya menggunakan enumerasi untuk mendefinisikan konstanta integral bernama dalam program mereka untuk memberikan keterbacaan yang lebih baik dan pemeliharaan perangkat lunak. Artikel ini akan membahas enum secara rinci.

Sintaksis

enum <Nama Jenis Enum> {
Enumeration_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:



enumKesalahan{
IO_ERROR,
DISK_ERROR,
NETWORK_ERROR
};

Kata kunci enum harus selalu digunakan untuk menentukan tipe enumerasi. Jadi, setiap kali Anda ingin menentukan jenis enumerasi, Anda harus menggunakan kata kunci enum sebelum . Setelah kata kunci enum, Anda harus menggunakan pengenal yang valid untuk menentukan .



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, yang berikutnya enum-element diberi nilai 1, dan seterusnya.





Perilaku default ini dapat diubah jika perlu dengan menetapkan nilai integral konstan secara eksplisit, sebagai berikut:

enumKesalahan{
IO_ERROR= 2,
DISK_ERROR,
NETWORK_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 (yaitu, 9) oleh compiler.



Jadi, Anda sekarang mengerti bagaimana mendefinisikan tipe enumerasi yang ditentukan pengguna di C. Apakah mungkin untuk mendeklarasikan variabel tipe enum (karena kita dapat mendeklarasikan variabel tipe integer)? Ya itu! Anda dapat mendeklarasikan variabel enum sebagai berikut:

enumKesalahan Hw_Error;

Sekali lagi, enum adalah kata kunci di sini, Error adalah tipe 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 mempelajari cara 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 */
enumKesalahan{
IO_ERROR,
DISK_ERROR,
NETWORK_ERROR
};

ke dalamutama()
{
enumKesalahan Hw_Error; /* Membuat variabel enum*/

printf ('Mengatur Hw_Error ke IO_ERROR ');
Hw_Error=IO_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Menyetel Hw_Error ke DISK_ERROR ');
Hw_Error=DISK_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Mengatur Hw_Error ke NETWORK_ERROR ');
Hw_Error=NETWORK_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

kembali 0;
}

https://lh6.googleusercontent.com/0CHtUqkuIA-okDEPI0_5fZLU6lZ6Exz6DK4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBWoiMOhzApzXey4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBVoiMOhzAQPzXey4

Contoh 2: Penggunaan Definisi enum Kustom

Dalam contoh ini, Anda akan mempelajari cara menentukan jenis 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 1NSdan 3rdelemen enum (yaitu, IO_ERROR dan NETWORK_ERROR, masing-masing), tetapi kami telah melewatkan inisialisasi eksplisit untuk 2dandan 4thelemen. Sekarang tanggung jawab kompiler untuk menetapkan nilai default ke 2dandan 4thelemen enum (yaitu, DISK_ERROR dan PRINT_ERROR, masing-masing). DISK_ERROR akan diberi nilai 3 dan PRINT_ERROR akan diberi nilai 9. Di bawah ini, Anda akan melihat contoh program dan outputnya.

#termasuk

/* Tentukan jenis enum - Inisialisasi kustom*/
enumKesalahan{
IO_ERROR= 2,
DISK_ERROR,
NETWORK_ERROR= 8,
PRINT_ERROR
};

ke dalamutama()
{

/* Deklarasi variabel enum*/
enumKesalahan Hw_Error;

printf ('Mengatur Hw_Error ke IO_ERROR ');
Hw_Error=IO_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Menyetel Hw_Error ke DISK_ERROR ');
Hw_Error=DISK_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Mengatur Hw_Error ke NETWORK_ERROR ');
Hw_Error=NETWORK_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Mengatur Hw_Error ke PRINT_ERROR ');
Hw_Error=PRINT_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

kembali 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlBLy6wzxvl2F-

Contoh 3: Definisi Enum Menggunakan Ekspresi Konstan

Dalam contoh ini, Anda akan mempelajari cara menggunakan ekspresi konstanta untuk menentukan nilai konstanta untuk elemen enum.

#termasuk

/* Tentukan tipe enum - inisialisasi khusus menggunakan ekspresi konstan
ekspresi konstan digunakan di sini jika:
A. 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 dimungkinkan di c.
* /


enumKesalahan{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
NETWORK_ERROR= 2 == 2,
PRINT_ERROR
};

ke dalamutama()
{

/* Deklarasi variabel enum*/
enumKesalahan Hw_Error;

printf ('Mengatur Hw_Error ke IO_ERROR ');
Hw_Error=IO_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Menyetel Hw_Error ke DISK_ERROR ');
Hw_Error=DISK_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Mengatur Hw_Error ke NETWORK_ERROR ');
Hw_Error=NETWORK_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Mengatur Hw_Error ke PRINT_ERROR ');
Hw_Error=PRINT_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

kembali 0;
}

https://lh4.googleusercontent.com/9FAbPOnM95LiP_UQvg40oHSW4sv34aqpFgasbHMiy06Z_rKEom81TuMCVsfxWaZedtQOMEQx7ef_5qEfRVcNrUvhitDzOcTvOilby4hUvhitDzbyOcTvhitDz

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.

#termasuk

ke dalamutama()
{

/* Tentukan tipe enum */
enumKesalahan_1{
IO_ERROR= 10,
DISK_ERROR,
NETWORK_ERROR= 3,
PRINT_ERROR
};


{

/* Mendefinisikan tipe enum di inner scope*/
enumKesalahan_1{
IO_ERROR= dua puluh,
DISK_ERROR,
NETWORK_ERROR= 35,
PRINT_ERROR
};

/* Deklarasi variabel enum*/
enumError_1 Hw_Error;
printf ('Mengatur Hw_Error ke IO_ERROR ');
Hw_Error=IO_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Menyetel Hw_Error ke DISK_ERROR ');
Hw_Error=DISK_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Mengatur Hw_Error ke NETWORK_ERROR ');
Hw_Error=NETWORK_ERROR;
printf ('Nilai Hw_Error = %d ',Hw_Error);

printf (' Mengatur Hw_Error ke PRINT_ERROR ');
Hw_Error=PRINT_ERROR;
printf ('Nilai Hw_Error = %d ',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 konstanta 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 mendefinisikan setiap nilai konstan secara manual saat mendefinisikan Makro.

Kesimpulan

Program enum di C dapat dianggap sebagai metode opsional untuk program mandiri atau proyek berukuran kecil karena pemrogram selalu dapat menggunakan makro alih-alih enum. Namun, programmer berpengalaman cenderung menggunakan enum daripada makro untuk proyek pengembangan perangkat lunak skala besar. Ini membantu dalam menulis program yang bersih dan mudah dibaca.