Sådan bruges enum på C -sprog

How Use Enum C Language



Enum -programmet i programmeringssproget C bruges til at definere integrale konstante værdier, hvilket er meget nyttigt til at skrive rene og læsbare programmer. Programmerere bruger normalt opregning til at definere navngivne integralkonstanter i deres programmer for at give softwaren bedre læsbarhed og vedligeholdelse. Denne artikel vil diskutere enum i detaljer.

Syntaks

enum <Enum Type Navn> {
Enumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
…… .........,
Enumeration_Constant_Element-n,
};

Standardværdien for Enumeration_Constant_Element-1 er 0, værdien af ​​Enumeration_Constant_Element-2 er 1, værdien af ​​Enumeration_Constant_Element-3 er 2, og værdien af ​​Enumeration_Constant_Element-n er (n-1).







Dyk dybt ned i Enum

Da vi nu kender syntaksen til at definere optællingstypen, lad os se på et eksempel:



enumFejl{
IO_ERROR,
DISK_ERROR,
NETVÆRKSFEJL
};

Enum -søgeordet skal altid bruges til at definere optællingstypen. Så når du vil definere en optællingstype, skal du bruge enum -søgeordet før. Efter enum -søgeordet skal du bruge en gyldig identifikator til at definere.



I ovenstående eksempel tildeler kompilatoren IO_ERROR til integralværdien: 0, DISK_ERROR til integralværdien: 1 og NETWORK_ERROR til integralværdien: 2. Som standard tildeles det første enum-element altid værdien 0, den næste enum-element tildeles værdien 1, og så videre.





Denne standardadfærd kan om nødvendigt ændres ved eksplicit at tildele den konstante integrale værdi som følger:

enumFejl{
IO_ERROR= 2,
DISK_ERROR,
NETVÆRKSFEJL= 8 ,
PRINT_ERROR
};

I dette tilfælde tildeles IO_ERROR eksplicit til værdien 2 af programmereren, DISK_ERROR tildeles til værdien 3 af kompilatoren, NETWORK_ERROR tildeles eksplicit til værdien 8 af programmereren, og PRINT_ERROR tildeles den næste integralværdi af det tidligere enum -element NETWORK_ERROR (dvs. 9) af kompilatoren.



Så du forstår nu, hvordan du definerer en brugerdefineret optællingstype i C. Er det muligt at deklarere en variabel af enumtype (da vi kan deklarere en variabel af heltalstype)? Ja det er! Du kan erklære variablen enum som følger:

enumFejl Hw_Error;

Igen er enum nøgleordet her, fejl er enumtypen, og Hw_Error er en enumvariabel.

Vi vil nu se på følgende eksempler for at forstå de forskellige anvendelser af enum:

  • Eksempel 1: Standard brug af enum definition
  • Eksempel 2: Brugerdefineret enum definition brug
  • Eksempel 3: enum definition ved hjælp af konstant udtryk
  • Eksempel 4: enum omfang

Eksempel 1: Standard enum Definition Usage

I dette eksempel lærer du, hvordan du definerer optællingstypen med standardkonstantværdier. Compileren sørger for at tildele standardværdierne til enumelementerne. Nedenfor ser du eksempelprogrammet og det tilhørende output.

#omfatte

/ * Definer enumtypen */
enumFejl{
IO_ERROR,
DISK_ERROR,
NETVÆRKSFEJL
};

intvigtigste()
{
enumFejl Hw_Error; /* Oprettelse af enum variabel*/

printf ('Indstilling af Hw_Error til IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til NETWORK_ERROR n');
Hw_Error=NETVÆRKSFEJL;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

Vend tilbage 0;
}

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

Eksempel 2: Brugerdefineret enum Definition

I dette eksempel lærer du, hvordan du definerer optællingstypen med en tilpasset konstant værdi. Dette eksempel hjælper dig også med at forstå, hvordan initialiseringen af ​​brugerdefinerede konstanter kan udføres i vilkårlig rækkefølge. I dette eksempel har vi eksplicit defineret den konstante værdi for 1stog 3rdenum -elementer (dvs. henholdsvis IO_ERROR og NETWORK_ERROR), men vi har sprunget over den eksplicitte initialisering for de 2ndog 4thelementer. Det er nu kompilatorens ansvar at tildele standardværdierne til 2ndog 4thenum -elementer (dvs. henholdsvis DISK_ERROR og PRINT_ERROR). DISK_ERROR tildeles en værdi på 3, og PRINT_ERROR tildeles en værdi på 9. Nedenfor ser du eksempelprogrammet og output.

#omfatte

/* Definer enumtypen - Tilpasset initialisering*/
enumFejl{
IO_ERROR= 2,
DISK_ERROR,
NETVÆRKSFEJL= 8,
PRINT_ERROR
};

intvigtigste()
{

/* Angiv enum variabel*/
enumFejl Hw_Error;

printf ('Indstilling af Hw_Error til IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til NETWORK_ERROR n');
Hw_Error=NETVÆRKSFEJL;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

Vend tilbage 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlwLw6wzww

Eksempel 3: Enum Definition ved hjælp af konstant udtryk

I dette eksempel lærer du, hvordan du bruger det konstante udtryk til at definere den konstante værdi for enum -elementer.

#omfatte

/* Definer enumtypen - brugerdefineret initialisering ved hjælp af konstant udtryk
konstant udtryk bruges her i tilfælde af:
en. IO_ERROR og
b. NETVÆRKSFEJL
Dette er en usædvanlig måde at definere enumelementerne på; dog dette
program viser, at denne måde at initialisere enumelementer er mulig i c.
* /


enumFejl{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
NETVÆRKSFEJL= 2 == 2,
PRINT_ERROR
};

intvigtigste()
{

/* Angiv enum variabel*/
enumFejl Hw_Error;

printf ('Indstilling af Hw_Error til IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til NETWORK_ERROR n');
Hw_Error=NETVÆRKSFEJL;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

Vend tilbage 0;
}

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

Eksempel 4: enum Omfang

I dette eksempel lærer du, hvordan omfangsreglen fungerer for enum. En MACRO (#define) kunne have været brugt til at definere en konstant i stedet for enum, men anvendelsesreglen fungerer ikke for MACRO.

#omfatte

intvigtigste()
{

/ * Definer enumtypen */
enumFejl_1{
IO_ERROR= 10,
DISK_ERROR,
NETVÆRKSFEJL= 3,
PRINT_ERROR
};


{

/* Definer enumtypen i det indre omfang*/
enumFejl_1{
IO_ERROR= tyve,
DISK_ERROR,
NETVÆRKSFEJL= 35,
PRINT_ERROR
};

/* Angiv enum variabel*/
enumFejl_1 Hw_Error;
printf ('Indstilling af Hw_Error til IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til NETWORK_ERROR n');
Hw_Error=NETVÆRKSFEJL;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);

printf (' nIndstilling af Hw_Error til PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Værdien af ​​Hw_Error = %d n',Hw_Error);
}
Vend tilbage 0;
}

Sammenligning mellem enum og makro

Enum Makro
Omfangsregel gælder for enum. Omfangsregel gælder ikke for makro.
Standard Enum -værditildeling sker automatisk.

Enum er meget nyttig til at definere et stort antal konstanter. Compileren tager standardinitialisering af konstantværdien.

Makrokonstantværdierne skal altid nævnes eksplicit af programmøren.

Dette kan være en kedelig proces for et stort antal konstanter, da programmøren altid skal definere hver konstant værdi manuelt, mens makroen defineres.

Konklusion

Enum-programmet i C kan betragtes som en valgfri metode til selvstændige programmer eller små projekter, da programmører altid kan bruge makro i stedet for et enum. Imidlertid har erfarne programmører en tendens til at bruge enum over makro til store softwareudviklingsprojekter. Dette hjælper med at skrive rene og læsbare programmer.