Ako používať enum v jazyku C.

How Use Enum C Language



Program enum v programovacom jazyku C sa používa na definovanie integrálnych konštantných hodnôt, čo je veľmi nápomocné pri písaní čistých a čitateľných programov. Programátori zvyčajne používajú enumeráciu na definovanie pomenovaných integrálnych konštánt vo svojich programoch, aby poskytli lepšiu čitateľnosť a udržiavateľnosť softvéru. Tento článok bude podrobne diskutovať o výčte.

Syntax

enum <Názov typu výčtu> {
Enumeration_Constant_Element-1,
Enumeration_Constant_Element-2,
Enumeration_Constant_Element-3,
…… .........,
Enumeration_Constant_Element-n,
};

Predvolená hodnota Enumeration_Constant_Element-1 je 0, hodnota Enumeration_Constant_Element-2 je 1, hodnota Enumeration_Constant_Element-3 je 2 a hodnota Enumeration_Constant_Element-n je (n-1).







Hlboko sa ponorte do Enumu

Keď už poznáme syntax na definovanie typu enumerácie, pozrime sa na príklad:



enumChyba{
IO_ERROR,
DISK_ERROR,
CHYBA SIETE
};

Na definovanie typu enumerácie je potrebné vždy použiť kľúčové slovo enum. Kedykoľvek teda chcete definovať typ enumerácie, musíte predtým použiť kľúčové slovo enum. Za kľúčovým slovom enum musíte použiť platný identifikátor na definovanie súboru.



Vo vyššie uvedenom príklade kompilátor priradí IO_ERROR k integrálnej hodnote: 0, DISK_ERROR k integrálnej hodnote: 1 a NETWORK_ERROR k integrálnej hodnote: 2. Štandardne je prvému prvku enum vždy priradená hodnota 0, ďalšiemu prvku enum je priradená hodnota 1 atď.





Toto predvolené správanie je možné v prípade potreby zmeniť explicitným priradením konštantnej integrálnej hodnoty takto:

enumChyba{
IO_ERROR= 2,
DISK_ERROR,
CHYBA SIETE= 8 ,
PRINT_ERROR
};

V tomto prípade je IO_ERROR programátorom explicitne priradený k hodnote 2, DISK_ERROR je kompilátorom priradený k hodnote 3, NETWORK_ERROR je programátorom explicitne priradený k hodnote 8 a PRINT_ERROR je priradený ďalšiemu. integrálna hodnota predchádzajúceho prvku enum NETWORK_ERROR (tj. 9) kompilátorom.



Teraz už rozumiete, ako definovať typ výčtu definovaný používateľom v C. Je možné deklarovať premennú typu enum (ako môžeme deklarovať premennú celočíselného typu)? Áno, je! Premennú enum môžete deklarovať nasledovne:

enumChyba Hw_Error;

Opäť je tu kľúčové slovo enum, chyba je typ enum a Hw_Error je premenná enum.

Teraz sa pozrieme na nasledujúce príklady, aby sme porozumeli rôznym použitiam enum:

  • Príklad 1: Predvolené použitie definície enum
  • Príklad 2: Použitie definície vlastného enumu
  • Príklad 3: definícia enumu pomocou konštantného výrazu
  • Príklad 4: rozsah výčtu

Príklad 1: Predvolené použitie definície enum

V tomto prípade sa naučíte, ako definovať typ enumerácie pomocou predvolených konštantných hodnôt. Kompilátor sa postará o priradenie predvolených hodnôt prvkom enum. Nasleduje ukážkový program a zodpovedajúci výstup.

#zahrnúť

/ * Definujte typ enumu */
enumChyba{
IO_ERROR,
DISK_ERROR,
CHYBA SIETE
};

intHlavná()
{
enumChyba Hw_Error; /* Vytváranie premennej enum*/

printf („Nastavenie Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na NETWORK_ERROR n');
Hw_Error=CHYBA SIETE;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

vrátiť sa 0;
}

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

Príklad 2: Použitie definície vlastného enumu

V tomto prípade sa naučíte, ako definovať typ enumerácie pomocou vlastnej konštantnej hodnoty. Tento príklad vám tiež pomôže pochopiť, ako je možné inicializáciu vlastných konštánt vykonať v ľubovoľnom náhodnom poradí. V tomto prípade sme explicitne definovali konštantnú hodnotu pre 1sva 3rdprvky enum (t. j. IO_ERROR a NETWORK_ERROR), preskočili sme však explicitnú inicializáciu pre 2.nda 4thprvky. Teraz je na kompilátore, aby priradil predvolené hodnoty k 2nda 4thprvky enum (tj. DISK_ERROR a PRINT_ERROR). DISK_ERROR bude priradená k hodnote 3 a PRINT_ERROR bude priradená k hodnote 9. Nižšie uvidíte príklad programu a výstup.

#zahrnúť

/* Definujte typ enumu - Vlastná inicializácia*/
enumChyba{
IO_ERROR= 2,
DISK_ERROR,
CHYBA SIETE= 8,
PRINT_ERROR
};

intHlavná()
{

/* Deklarovať premennú enum*/
enumChyba Hw_Error;

printf („Nastavenie Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na NETWORK_ERROR n');
Hw_Error=CHYBA SIETE;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

vrátiť sa 0;
}

Odkaz

Príklad 3: Definícia enum pomocou konštantného výrazu

V tomto prípade sa naučíte, ako používať konštantný výraz na definovanie konštantnej hodnoty pre prvky enum.

#zahrnúť

/* Definujte typ enum - vlastná inicializácia pomocou konštantného výrazu
Tu sa používa konštantný výraz v prípade:
a. IO_ERROR a
b. CHYBA SIETE
Toto je neobvyklý spôsob definovania prvkov enum; však toto
program ukazuje, že tento spôsob inicializácie enumových prvkov je možný v c.
* /


enumChyba{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
CHYBA SIETE= 2 == 2,
PRINT_ERROR
};

intHlavná()
{

/* Deklarovať premennú enum*/
enumChyba Hw_Error;

printf („Nastavenie Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na NETWORK_ERROR n');
Hw_Error=CHYBA SIETE;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

vrátiť sa 0;
}

https://lh4.googleusercontent.com

Príklad 4: Rozsah výčtu

V tomto prípade sa naučíte, ako funguje pravidlo určovania rozsahu pre enum. Na definovanie konštanty namiesto enumu bolo možné použiť MACRO (#define), ale pravidlo určovania rozsahu pre MACRO nefunguje.

#zahrnúť

intHlavná()
{

/ * Definujte typ enumu */
enumChyba_1{
IO_ERROR= 10,
DISK_ERROR,
CHYBA SIETE= 3,
PRINT_ERROR
};


{

/* Definujte typ enum vo vnútornom rozsahu*/
enumChyba_1{
IO_ERROR= dvadsať,
DISK_ERROR,
CHYBA SIETE= 35,
PRINT_ERROR
};

/* Deklarovať premennú enum*/
enumChyba_1 Hw_Error;
printf („Nastavenie Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na DISK_ERROR n');
Hw_Error=DISK_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na NETWORK_ERROR n');
Hw_Error=CHYBA SIETE;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavenie Hw_Error na PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);
}
vrátiť sa 0;
}

Porovnanie medzi enum a makro

Enum Makro
Pre enum platí pravidlo rozsahu. Pravidlo určovania rozsahu sa nevzťahuje na makro.
Predvolené priradenie hodnoty Enum prebieha automaticky.

Enum je veľmi užitočné pri definovaní veľkého počtu konštánt. Kompilátor prevezme inicializáciu predvolenej konštantnej hodnoty.

Hodnoty makro konštant musí programátor vždy výslovne uviesť.

To môže byť únavný proces pre veľký počet konštánt, pretože programátor musí pri definovaní makra vždy manuálne definovať každú konštantnú hodnotu.

Záver

Program enum v C by sa mohol považovať za voliteľnú metódu pre samostatné programy alebo malé projekty, pretože programátori môžu namiesto enumu vždy použiť makro. Skúsení programátori však väčšinou používajú enum cez makro na rozsiahle projekty vývoja softvéru. Pomáha to pri písaní čistých a čitateľných programov.