C Programiranje

Kako se koristi enum u jeziku C

Kako se koristi enum u jeziku C
Program enum u programskom jeziku C koristi se za definiranje integralnih konstantnih vrijednosti, što je vrlo korisno u pisanju čistih i čitljivih programa. Programeri obično koriste nabrajanje kako bi definirali imenovane integralne konstante u svojim programima kako bi osigurali bolju čitljivost i održivost softvera. U ovom će se članku detaljno raspravljati o nabrajanju.

Sintaksa

nabrajanje
Enumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
.. ,
Enumeration_Constant_Element-n,
;

Zadana vrijednost Enumeration_Constant_Element-1 je 0, vrijednost Enumeration_Constant_Element-2 je 1, vrijednost Enumeration_Constant_Element-3 je 2, a vrijednost Enumeration_Constant_Element-n je (n-1).

Duboko zaronite u Enum

Sada, budući da znamo sintaksu da definiramo tip nabrajanja, pogledajmo primjer:

enum pogreška
IO_ERROR,
DISK_ERROR,
POGREŠKA MREŽE
;

Ključna riječ "enum" uvijek se mora koristiti za definiranje vrste popisivanja. Dakle, kad god želite definirati vrstu nabrajanja, prije toga morate upotrijebiti ključnu riječ "enum" . Nakon ključne riječi “enum”, morate upotrijebiti valjani identifikator da biste definirali .

U gornjem primjeru, kompajler će dodijeliti IO_ERROR integralnoj vrijednosti: 0, DISK_ERROR integralnoj vrijednosti: 1 i NETWORK_ERROR integralnoj vrijednosti: 2.  Prema zadanim postavkama prvom elementu nabrajanja uvijek se dodjeljuje vrijednost 0, sljedećem elementu nabrajanja dodjeljuje se vrijednost 1 i tako dalje.

To se zadano ponašanje može promijeniti ako je potrebno eksplicitnim dodjeljivanjem konstantne integralne vrijednosti, kako slijedi:

enum pogreška
IO_ERROR = 2,
DISK_ERROR,
GREŠKA_MREŽE = 8 ,
PRINT_ERROR
;

U ovom je slučaju programer eksplicitno dodijelio vrijednost IO_ERROR vrijednosti 2, DISK_ERROR programer dodijelio vrijednosti 3, NETWORK_ERROR programer eksplicitno dodijelio vrijednosti 8, a sljedećem PRINT_ERROR integralna vrijednost prethodnog elementa nabrajanja NETWORK_ERROR (i.e., 9) od strane sastavljača.

Dakle, sada razumijete kako definirati korisnički definirani tip nabrajanja u C-u. Je li moguće deklarirati varijablu enum tipa (kao što možemo deklarirati varijablu cijelog broja)?  Da je! Varijablu enum možete deklarirati na sljedeći način:

enum Greška Hw_Error;

Opet, “enum” je ovdje ključna riječ, “Error” je vrsta enum, a “Hw_Error” je enum varijabla.

Sada ćemo razmotriti sljedeće primjere kako bismo razumjeli različite upotrebe enum:

  • Primjer 1: Zadana upotreba definicije nabrajanja
  • Primjer 2: Uporaba prilagođene definicije nabrajanja
  • Primjer 3: definicija nabrajanja pomoću konstantnog izraza
  • Primjer 4: opseg nabrajanja

Primjer 1: Primjena definicije zadanog popisa

U ovom ćete primjeru naučiti kako definirati tip nabrajanja sa zadanim konstantnim vrijednostima. Prevoditelj će se pobrinuti za dodjeljivanje zadanih vrijednosti elementima nabrajanja. Ispod ćete vidjeti primjer programa i odgovarajući izlaz.

#include
/ * Definirajte vrstu nabrajanja * /
enum pogreška
IO_ERROR,
DISK_ERROR,
POGREŠKA MREŽE
;
int main ()

enum Greška Hw_Error; / * Izrada enum varijable * /
printf ("Postavljanje Hw_Error na IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na NETWORK_ERROR \ n");
Hw_Error = NETWORK_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
return 0;

Primjer 2: Uporaba prilagođene enum definicije

U ovom ćete primjeru naučiti kako definirati tip nabrajanja s prilagođenom konstantnom vrijednošću. Također, ovaj će vam primjer pomoći da shvatite kako se inicijalizacija prilagođenih konstanti može izvršiti bilo kojim slučajnim redoslijedom. U ovom smo primjeru izričito definirali konstantnu vrijednost za 1sv i 3rd elementi nabrajanja (i.e., IO_ERROR odnosno NETWORK_ERROR), ali smo preskočili eksplicitnu inicijalizaciju za 2nd i 4th elementi. Sada je odgovornost kompajlera dodijeliti zadane vrijednosti 2nd i 4th elementi nabrajanja (i.e., DISK_ERROR i PRINT_ERROR). DISK_ERROR dodijelit će se vrijednosti 3, a PRINT_ERROR dodijelit će se vrijednosti 9. Ispod ćete vidjeti primjer programa i rezultate.

#include
/ * Odredite vrstu nabrajanja - Prilagođena inicijalizacija * /
enum pogreška
IO_ERROR = 2,
DISK_ERROR,
GREŠKA_MREŽE = 8,
PRINT_ERROR
;
int main ()

/ * Izjavi varijablu nabrajanja * /
enum Greška Hw_Error;
printf ("Postavljanje Hw_Error na IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na NETWORK_ERROR \ n");
Hw_Error = NETWORK_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
return 0;

Primjer 3: Definicija enuma pomoću konstantnog izraza

U ovom ćete primjeru naučiti kako koristiti konstantni izraz za definiranje konstantne vrijednosti za elemente nabrajanja.

#include
/ * Definirajte tip nabrajanja - prilagođena inicijalizacija pomoću konstantnog izraza
ovdje se koristi konstantni izraz u slučaju:
a. IO_ERROR i
b. POGREŠKA MREŽE
Ovo je neobičan način definiranja elemenata nabrajanja; međutim ovo
program pokazuje da je ovaj način inicijalizacije elemenata nabrajanja moguć u c.
* /
enum pogreška
IO_ERROR = 1 + 2 * 3 + 4,
DISK_ERROR,
GREŠKA MREŽE = 2 == 2,
PRINT_ERROR
;
int main ()

/ * Izjavi varijablu nabrajanja * /
enum Greška Hw_Error;
printf ("Postavljanje Hw_Error na IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje pogreške Hw_Error na DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na NETWORK_ERROR \ n");
Hw_Error = NETWORK_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
return 0;

Primjer 4: enum Opseg

U ovom ćete primjeru naučiti kako pravilo opsega djeluje za enum. MACRO (#define) se mogao koristiti za definiranje konstante umjesto nabrajanja, ali pravilo opsega ne radi za MACRO.

#include
int main ()

/ * Definirajte vrstu nabrajanja * /
enum Greška_1
IO_ERROR = 10,
DISK_ERROR,
NETWORK_ERROR = 3,
PRINT_ERROR
;

/ * Definirajte tip nabrajanja u unutarnjem opsegu * /
enum Greška_1
IO_ERROR = 20,
DISK_ERROR,
GREŠKA_MREŽE = 35,
PRINT_ERROR
;
/ * Izjavi varijablu nabrajanja * /
enum Error_1 Hw_Error;
printf ("Postavljanje Hw_Error na IO_ERROR \ n");
Hw_Error = IO_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje pogreške Hw_Error na DISK_ERROR \ n");
Hw_Error = DISK_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na NETWORK_ERROR \ n");
Hw_Error = NETWORK_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);
printf ("\ nPostavljanje Hw_Error na PRINT_ERROR \ n");
Hw_Error = PRINT_ERROR;
printf ("Vrijednost Hw_Error =% d \ n", Hw_Error);

return 0;

Usporedba broja i makronaredbe

Enum Makro
Za enum vrijedi pravilo opsega. Pravilo opsega nije primjenjivo za makronaredbe.
Zadana dodjela vrijednosti Enum događa se automatski.

Enum je vrlo koristan u definiranju velikog broja konstanti. Prevoditelj uzima zadanu inicijalizaciju konstantne vrijednosti.

Vrijednosti konstante makronaredbe programer mora uvijek izričito spomenuti.

To bi mogao biti naporan postupak za velik broj konstanti, jer programer uvijek mora ručno definirati svaku konstantnu vrijednost dok definira Makronaredbu.

Zaključak

Enum program na C-u mogao bi se smatrati neobaveznom metodom za samostalne programe ili male projekte, jer programeri uvijek mogu koristiti makronaredbu umjesto enum-a. Međutim, iskusni programeri obično koriste enum nad makronaredbama za velike projekte razvoja softvera. To pomaže u pisanju čistih i čitljivih programa.

Top 5 ergonomskih proizvoda za računalni miš za Linux
Uzrokuje li dugotrajno korištenje računala bolove u zapešću ili prstima? Patite li od ukočenih zglobova i stalno se morate rukovati? Osjećate li goruć...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Zamijenite svoje tipke miša različito za različiti softver pomoću X-Mouse Button Control
Možda vam treba alat koji bi mogao promijeniti kontrolu miša sa svakom aplikacijom koju koristite. Ako je to slučaj, možete isprobati aplikaciju pod n...