Cara menggunakan enum dalam Bahasa C

How Use Enum C Language



Program enum dalam bahasa pengaturcaraan C digunakan untuk menentukan nilai pemalar integral, yang sangat membantu dalam menulis program yang bersih dan dapat dibaca. Pengaturcara biasanya menggunakan penghitungan untuk menentukan pemalar integral yang dinamakan dalam program mereka untuk memberikan keterbacaan dan kesesuaian perisian yang lebih baik. Artikel ini akan membincangkan enum secara terperinci.

Sintaks

enum <Nama Jenis Enum> {
Enumerasi_Konstant_Elemen-1,
Enumerasi_Konstant_Elemen-2,
Enumerasi_Konstant_Elemen-3,
…… ………,
Enumerasi_Konstant_Elemen-n,
};

Nilai lalai 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).







Mendalam Enum

Sekarang, kerana kita tahu sintaks untuk menentukan jenis penghitungan, mari kita lihat contohnya:



enumRalat{
IO_ERROR,
DISK_ERROR,
NETWORK_ERROR
};

Kata kunci enum mesti selalu digunakan untuk menentukan jenis penghitungan. Oleh itu, setiap kali anda mahu menentukan jenis penghitungan, anda mesti menggunakan kata kunci enum sebelumnya. Selepas kata kunci enum, anda mesti menggunakan pengecam yang sah untuk menentukan.



Dalam contoh di atas, penyusun akan menetapkan IO_ERROR ke nilai kamiran: 0, DISK_ERROR ke nilai kamiran: 1 dan NETWORK_ERROR ke nilai kamiran: 2. Secara lalai, elemen enum pertama selalu diberikan nilai 0, seterusnya enum-element diberi nilai 1, dan seterusnya.





Tingkah laku lalai ini dapat diubah jika perlu dengan menetapkan nilai kamiran tetap secara eksplisit, seperti berikut:

enumRalat{
IO_ERROR= 2,
DISK_ERROR,
NETWORK_ERROR= 8 ,
PRINT_ERROR
};

Dalam kes ini, IO_ERROR secara eksplisit diberikan pada nilai 2 oleh pengaturcara, DISK_ERROR ditugaskan pada nilai 3 oleh penyusun, NETWORK_ERROR secara eksplisit diberikan kepada nilai 8 oleh pengaturcara, dan PRINT_ERROR ditugaskan ke seterusnya nilai kamiran elemen enum sebelumnya NETWORK_ERROR (iaitu, 9) oleh penyusun.



Oleh itu, anda sekarang memahami bagaimana menentukan jenis penghitungan yang ditentukan pengguna dalam C. Adakah mungkin untuk menyatakan pemboleh ubah jenis enum (kerana kita dapat menyatakan pemboleh ubah jenis bilangan bulat)? Ya betul! Anda boleh menyatakan pemboleh ubah enum seperti berikut:

enumRalat Hw_Error;

Sekali lagi, enum adalah kata kunci di sini, Ralat adalah jenis enum, dan Hw_Error adalah pemboleh ubah enum.

Kami sekarang akan melihat contoh berikut untuk memahami pelbagai penggunaan enum:

  • Contoh 1: Penggunaan definisi enum lalai
  • Contoh 2: Penggunaan definisi enum tersuai
  • Contoh 3: definisi enum menggunakan ungkapan malar
  • Contoh 4: skop enum

Contoh 1: Penggunaan Definisi enum lalai

Dalam contoh ini, anda akan belajar bagaimana menentukan jenis penghitungan dengan nilai tetap lalai. Penyusun akan mengurus menetapkan nilai lalai ke elemen enum. Di bawah ini, anda akan melihat contoh program dan output yang sesuai.

#sertakan

/ * Tentukan jenis enum * /
enumRalat{
IO_ERROR,
DISK_ERROR,
NETWORK_ERROR
};

intutama()
{
enumRalat Hw_Error; / * Membuat pemboleh ubah enum * /

printf ('Menetapkan Hw_Error ke IO_ERROR n');
Ralat Hw_=IO_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke DISK_ERROR n');
Ralat Hw_=DISK_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke NETWORK_ERROR n');
Ralat Hw_=NETWORK_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

kembali 0;
}

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

Contoh 2: Penggunaan Definisi enum tersuai

Dalam contoh ini, anda akan belajar bagaimana menentukan jenis penghitungan dengan nilai pemalar tersuai. Juga, contoh ini akan membantu anda memahami bagaimana permulaan pemalar tersuai dapat dilakukan dalam urutan rawak. Dalam contoh ini, kami telah secara jelas menentukan nilai pemalar untuk 1stdan 3rdelemen enum (iaitu, IO_ERROR dan NETWORK_ERROR, masing-masing), tetapi kami telah melewatkan permulaan yang jelas untuk 2nddan 4ikaunsur. Sekarang menjadi tanggungjawab penyusun untuk menetapkan nilai lalai ke 2nddan 4ikaelemen enum (masing-masing, DISK_ERROR dan PRINT_ERROR). DISK_ERROR akan diberikan kepada nilai 3 dan PRINT_ERROR akan diberikan pada nilai 9. Di bawah ini, anda akan melihat contoh program dan outputnya.

#sertakan

/ * Tentukan jenis enum - Permulaan khusus * /
enumRalat{
IO_ERROR= 2,
DISK_ERROR,
NETWORK_ERROR= 8,
PRINT_ERROR
};

intutama()
{

/ * Nyatakan pemboleh ubah enum * /
enumRalat Hw_Error;

printf ('Menetapkan Hw_Error ke IO_ERROR n');
Ralat Hw_=IO_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke DISK_ERROR n');
Ralat Hw_=DISK_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke NETWORK_ERROR n');
Ralat Hw_=NETWORK_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke PRINT_ERROR n');
Ralat Hw_=PRINT_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

kembali 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlBLy6wxFnFwFFx

Contoh 3: Definisi Enum Menggunakan Ekspresi Tetap

Dalam contoh ini, anda akan belajar bagaimana menggunakan ungkapan malar untuk menentukan nilai malar bagi elemen enum.

#sertakan

/ * Tentukan jenis enum - inisialisasi khusus menggunakan ungkapan malar
ungkapan malar digunakan di sini sekiranya:
a. IO_ERROR dan
b. NETWORK_ERROR
Ini adalah cara yang tidak biasa untuk menentukan elemen enum; namun, ini
program menunjukkan bahawa cara inisialisasi elemen enum ini adalah mungkin di c.
* /


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

intutama()
{

/ * Nyatakan pemboleh ubah enum * /
enumRalat Hw_Error;

printf ('Menetapkan Hw_Error ke IO_ERROR n');
Ralat Hw_=IO_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke DISK_ERROR n');
Ralat Hw_=DISK_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke NETWORK_ERROR n');
Ralat Hw_=NETWORK_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke PRINT_ERROR n');
Ralat Hw_=PRINT_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

kembali 0;
}

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

Contoh 4: Skop enum

Dalam contoh ini, anda akan belajar bagaimana peraturan pemarkahan berfungsi untuk enum. MACRO (#define) boleh digunakan untuk menentukan pemalar dan bukannya enum, tetapi peraturan pemarkahan tidak berfungsi untuk MACRO.

#sertakan

intutama()
{

/ * Tentukan jenis enum * /
enumRalat_1{
IO_ERROR= 10,
DISK_ERROR,
NETWORK_ERROR= 3,
PRINT_ERROR
};


{

/ * Tentukan jenis enum dalam ruang lingkup dalaman * /
enumRalat_1{
IO_ERROR= dua puluh,
DISK_ERROR,
NETWORK_ERROR= 35,
PRINT_ERROR
};

/ * Nyatakan pemboleh ubah enum * /
enumRalat_1 Hw_Error;
printf ('Menetapkan Hw_Error ke IO_ERROR n');
Ralat Hw_=IO_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke DISK_ERROR n');
Ralat Hw_=DISK_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke NETWORK_ERROR n');
Ralat Hw_=NETWORK_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);

printf (' nMenetapkan Hw_Error ke PRINT_ERROR n');
Ralat Hw_=PRINT_ERROR;
printf ('Nilai Hw_Error =% d n',Ralat Hw_);
}
kembali 0;
}

Perbandingan Antara enum dan makro

Enum Makro
Peraturan scoping berlaku untuk enum. Peraturan pemarkahan tidak berlaku untuk Makro.
Penugasan nilai Enum lalai berlaku secara automatik.

Enum sangat membantu dalam menentukan sebilangan besar pemalar. Penyusun mengambil inisialisasi nilai malar lalai.

Nilai pemalar makro mesti selalu disebut secara jelas oleh pengaturcara.

Ini boleh menjadi proses yang membosankan untuk sebilangan besar pemalar kerana pengaturcara harus selalu menentukan setiap nilai tetap secara manual semasa menentukan Makro.

Kesimpulannya

Program enum di C dapat dianggap sebagai kaedah pilihan untuk program mandiri atau projek bersaiz kecil kerana pengaturcara selalu dapat menggunakan makro dan bukan enum. Namun, pengaturcara berpengalaman cenderung menggunakan enum over makro untuk projek pembangunan perisian berskala besar. Ini membantu dalam menulis program yang bersih dan mudah dibaca.