Hoe enum te gebruiken in C Language

How Use Enum C Language



Het enum-programma in de programmeertaal C wordt gebruikt om integrale constante waarden te definiëren, wat erg handig is bij het schrijven van schone en leesbare programma's. Programmeurs gebruiken normaal gesproken opsommingen om benoemde integrale constanten in hun programma's te definiëren om de software beter leesbaar en onderhoudbaar te maken. Dit artikel zal enum in detail bespreken.

Syntaxis

opsomming <Enum-typenaam> {
Opsomming_Constant_Element-1,
Opsomming_Constant_Element-2,
Opsomming_Constant_Element-3,
…… ...........,
Opsomming_Constant_Element-N,
};

De standaardwaarde van Enumeration_Constant_Element-1 is 0, de waarde van Enumeration_Constant_Element-2 is 1, de waarde van Enumeration_Constant_Element-3 is 2 en de waarde van Enumeration_Constant_Element-n is (n-1).







Diep duiken in Enum

Nu we de syntaxis kennen om het opsommingstype te definiëren, laten we een voorbeeld bekijken:



opsommingFout{
IO_ERROR,
DISK_ERROR,
NETWERKFOUT
};

Het sleutelwoord enum moet altijd worden gebruikt om het type opsomming te definiëren. Dus wanneer u een enumeratietype wilt definiëren, moet u het trefwoord enum vóór gebruiken. Na het trefwoord enum moet u een geldige id gebruiken om de .



In het bovenstaande voorbeeld wijst de compiler IO_ERROR toe aan de integrale waarde: 0, DISK_ERROR aan de integrale waarde: 1 en NETWORK_ERROR aan de integrale waarde: 2. Standaard krijgt het eerste enum-element altijd de waarde 0, het volgende enum-element krijgt de waarde 1, enzovoort.





Dit standaardgedrag kan indien nodig worden gewijzigd door de constante integraalwaarde expliciet als volgt toe te wijzen:

opsommingFout{
IO_ERROR= 2,
DISK_ERROR,
NETWERKFOUT= 8 ,
PRINT_ERROR
};

In dit geval wordt de IO_ERROR expliciet toegewezen aan een waarde van 2 door de programmeur, DISK_ERROR wordt toegewezen aan een waarde van 3 door de compiler, NETWORK_ERROR wordt expliciet toegewezen aan de waarde 8 door de programmeur en PRINT_ERROR wordt toegewezen aan de volgende integrale waarde van het vorige enum-element NETWORK_ERROR (dwz 9) door de compiler.



U begrijpt nu hoe u een door de gebruiker gedefinieerd enumeratietype in C definieert. Is het mogelijk om een ​​variabele van het type opsomming te declareren (zoals we een variabele van het type integer kunnen declareren)? Jazeker! U kunt de variabele enum als volgt declareren:

opsommingFout Hw_Error;

Nogmaals, enum is hier het sleutelwoord, Error is het enum-type en Hw_Error is een enum-variabele.

We zullen nu naar de volgende voorbeelden kijken om de verschillende gebruiken van enum te begrijpen:

  • Voorbeeld 1: Standaard gebruik van opsommingsdefinitie
  • Voorbeeld 2: Gebruik van aangepaste opsommingsdefinitie
  • Voorbeeld 3: enum-definitie met constante uitdrukking
  • Voorbeeld 4: opsommingsbereik

Voorbeeld 1: Standaard opsomming Definitie Gebruik

In dit voorbeeld leert u hoe u het opsommingstype definieert met standaard constante waarden. De compiler zorgt voor het toewijzen van de standaardwaarden aan de enum-elementen. Hieronder ziet u het voorbeeldprogramma en de bijbehorende uitvoer.

#erbij betrekken

/* Definieer het opsommingstype */
opsommingFout{
IO_ERROR,
DISK_ERROR,
NETWERKFOUT
};

inthoofd()
{
opsommingFout Hw_Error; /* Enum-variabele maken*/

printf ('Hw_Error instellen op IO_ERRORN');
Hw_Fout=IO_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op DISK_ERRORN');
Hw_Fout=DISK_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op NETWORK_ERRORN');
Hw_Fout=NETWERKFOUT;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

opbrengst 0;
}

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

Voorbeeld 2: Aangepaste opsomming Definitie Gebruik

In dit voorbeeld leert u hoe u het opsommingstype definieert met een aangepaste constante waarde. Dit voorbeeld helpt u ook te begrijpen hoe de initialisatie van aangepaste constanten in willekeurige volgorde kan worden uitgevoerd. In dit voorbeeld hebben we expliciet de constante waarde gedefinieerd voor de 1NSen 3rdenum-elementen (d.w.z. respectievelijk IO_ERROR en NETWORK_ERROR), maar we hebben de expliciete initialisatie voor de 2 overgeslagennden 4eelementen. Het is nu de verantwoordelijkheid van de compiler om de standaardwaarden toe te wijzen aan de 2nden 4eenum-elementen (d.w.z. respectievelijk DISK_ERROR en PRINT_ERROR). DISK_ERROR krijgt de waarde 3 en PRINT_ERROR krijgt de waarde 9. Hieronder ziet u het voorbeeldprogramma en de uitvoer.

#erbij betrekken

/* Definieer het enum-type - Aangepaste initialisatie*/
opsommingFout{
IO_ERROR= 2,
DISK_ERROR,
NETWERKFOUT= 8,
PRINT_ERROR
};

inthoofd()
{

/* Declareer enum variabele*/
opsommingFout Hw_Error;

printf ('Hw_Error instellen op IO_ERRORN');
Hw_Fout=IO_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op DISK_ERRORN');
Hw_Fout=DISK_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op NETWORK_ERRORN');
Hw_Fout=NETWERKFOUT;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op PRINT_ERRORN');
Hw_Fout=PRINT_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

opbrengst 0;
}

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

Voorbeeld 3: Enum-definitie met behulp van constante expressie

In dit voorbeeld leert u hoe u de constante-expressie gebruikt om de constante waarde voor enum-elementen te definiëren.

#erbij betrekken

/* Definieer het enum-type - aangepaste initialisatie met constante expressie
constante expressie wordt hier gebruikt in het geval van:
A. IO_ERROR en
B. NETWERKFOUT
Dit is een ongebruikelijke manier om de enum-elementen te definiëren; echter, dit
programma laat zien dat deze manier van enum elementen initialisatie mogelijk is in c.
* /


opsommingFout{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
NETWERKFOUT= 2 == 2,
PRINT_ERROR
};

inthoofd()
{

/* Declareer enum variabele*/
opsommingFout Hw_Error;

printf ('Hw_Error instellen op IO_ERRORN');
Hw_Fout=IO_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op DISK_ERRORN');
Hw_Fout=DISK_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op NETWORK_ERRORN');
Hw_Fout=NETWERKFOUT;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op PRINT_ERRORN');
Hw_Fout=PRINT_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

opbrengst 0;
}

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

Voorbeeld 4: enum Scope

In dit voorbeeld leert u hoe de scopingregel werkt voor enum. Een MACRO (#define) had kunnen worden gebruikt om een ​​constante te definiëren in plaats van de enum, maar de scopingregel werkt niet voor MACRO.

#erbij betrekken

inthoofd()
{

/* Definieer het opsommingstype */
opsommingError_1{
IO_ERROR= 10,
DISK_ERROR,
NETWERKFOUT= 3,
PRINT_ERROR
};


{

/* Definieer het enum type in de inner scope*/
opsommingError_1{
IO_ERROR= twintig,
DISK_ERROR,
NETWERKFOUT= 35,
PRINT_ERROR
};

/* Declareer enum variabele*/
opsommingError_1 Hw_Error;
printf ('Hw_Error instellen op IO_ERRORN');
Hw_Fout=IO_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op DISK_ERRORN');
Hw_Fout=DISK_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op NETWORK_ERRORN');
Hw_Fout=NETWERKFOUT;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);

printf ('NHw_Error instellen op PRINT_ERRORN');
Hw_Fout=PRINT_ERROR;
printf ('Waarde van Hw_Error = %dN',Hw_Fout);
}
opbrengst 0;
}

Vergelijking tussen enum en macro

Enum Macro
De scopingregel is van toepassing op enum. Bereikregel is niet van toepassing op Macro.
De standaardtoewijzing van de Enum-waarde gebeurt automatisch.

Enum is erg handig bij het definiëren van een groot aantal constanten. De compiler neemt de standaard initialisatie van de constante waarde.

De macroconstanten moeten altijd expliciet door de programmeur worden vermeld.

Dit kan een vervelend proces zijn voor een groot aantal constanten, aangezien de programmeur elke constante waarde altijd handmatig moet definiëren tijdens het definiëren van de macro.

Conclusie

Het enum-programma in C kan worden beschouwd als een optionele methode voor op zichzelf staande programma's of kleine projecten, omdat programmeurs altijd macro kunnen gebruiken in plaats van een enum. Ervaren programmeurs hebben echter de neiging om enum boven macro te gebruiken voor grootschalige softwareontwikkelingsprojecten. Dit helpt bij het schrijven van schone en leesbare programma's.