Jak používat výčet v jazyce C.

How Use Enum C Language



Program enum v programovacím jazyce C slouží k definování integrálních konstantních hodnot, což je velmi užitečné při psaní čistých a čitelných programů. Programátoři obvykle používají výčet k definování pojmenovaných integrálních konstant ve svých programech, aby zajistili lepší čitelnost a udržovatelnost softwaru. Tento článek bude podrobně diskutovat o výčtu.

Syntax

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

Výchozí 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).







Hluboký ponor do Enumu

Nyní, protože známe syntaxi pro definování typu výčtu, podívejme se na příklad:



enumChyba{
IO_ERROR,
DISK_ERROR,
CHYBA SÍTĚ
};

K definování typu výčtu je vždy nutné použít klíčové slovo enum. Kdykoli tedy chcete definovat typ výčtu, musíte předtím použít klíčové slovo enum. Za klíčovým slovem enum musíte použít platný identifikátor k definování.



Ve výše uvedeném příkladu kompilátor přiřadí IO_ERROR k integrální hodnotě: 0, DISK_ERROR k integrální hodnotě: 1 a NETWORK_ERROR k integrální hodnotě: 2. Ve výchozím nastavení je prvnímu prvku enum vždy přiřazena hodnota 0, další prvku enum je přiřazena hodnota 1 atd.





Toto výchozí chování lze v případě potřeby změnit explicitním přiřazením konstantní integrální hodnoty takto:

enumChyba{
IO_ERROR= 2,
DISK_ERROR,
CHYBA SÍTĚ= 8 ,
PRINT_ERROR
};

V tomto případě je IO_ERROR programátorem explicitně přiřazen hodnotě 2, DISK_ERROR je kompilátorem přiřazen hodnotě 3, NETWORK_ERROR je programátorem explicitně přiřazen hodnotě 8 a PRINT_ERROR je přiřazen dalšímu. integrální hodnota předchozího prvku výčtu NETWORK_ERROR (tj. 9) kompilátorem.



Takže nyní rozumíte tomu, jak definovat uživatelem definovaný typ výčtu v C. Je možné deklarovat proměnnou typu enum (protože můžeme deklarovat proměnnou celočíselného typu)? Ano to je! Proměnnou enum můžete deklarovat následujícím způsobem:

enumChyba Hw_Error;

Opět platí, že zde je klíčovým slovem enum, Error je typ enum a Hw_Error je proměnná enum.

Nyní se podíváme na následující příklady, abychom pochopili různá použití výčtu:

  • Příklad 1: Výchozí použití definice výčtu
  • Příklad 2: Použití definice vlastního výčtu
  • Příklad 3: definice výčtu pomocí konstantního výrazu
  • Příklad 4: rozsah výčtu

Příklad 1: Výchozí použití definice výčtu

V tomto příkladu se naučíte, jak definovat typ výčtu s výchozími hodnotami konstant. Kompilátor se postará o přiřazení výchozích hodnot prvkům výčtu. Níže uvidíte ukázkový program a odpovídající výstup.

#zahrnout

/ * Definujte typ výčtu */
enumChyba{
IO_ERROR,
DISK_ERROR,
CHYBA SÍTĚ
};

inthlavní()
{
enumChyba Hw_Error; /* Vytváření proměnné výčtu*/

printf ('Nastavení Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

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

printf (' nNastavení Hw_Error na NETWORK_ERROR n');
Hw_Error=CHYBA SÍTĚ;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

vrátit se 0;
}

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

Příklad 2: Použití definice vlastního výčtu

V tomto příkladu se naučíte, jak definovat typ výčtu pomocí vlastní konstantní hodnoty. Tento příklad vám také pomůže pochopit, jak lze inicializaci vlastních konstant provést v libovolném náhodném pořadí. V tomto příkladu jsme explicitně definovali konstantní hodnotu pro 1Svatýa 3rdenum elements (tj. IO_ERROR a NETWORK_ERROR), ale přeskočili jsme explicitní inicializaci pro 2nda 4thelementy. Nyní je na kompilátoru, aby přiřadil výchozí hodnoty 2nda 4thprvky výčtu (tj. DISK_ERROR a PRINT_ERROR). DISK_ERROR bude přiřazen hodnotě 3 a PRINT_ERROR bude přiřazen hodnotě 9. Níže uvidíte ukázkový program a výstup.

#zahrnout

/* Definujte typ výčtu - Vlastní inicializace*/
enumChyba{
IO_ERROR= 2,
DISK_ERROR,
CHYBA SÍTĚ= 8,
PRINT_ERROR
};

inthlavní()
{

/* Deklarujte výčtovou proměnnou*/
enumChyba Hw_Error;

printf ('Nastavení Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

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

printf (' nNastavení Hw_Error na NETWORK_ERROR n');
Hw_Error=CHYBA SÍTĚ;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

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

vrátit se 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlBLy6wzxvl2

Příklad 3: Definice výčtu pomocí konstantního výrazu

V tomto příkladu se naučíte, jak pomocí konstantního výrazu definovat konstantní hodnotu pro prvky výčtu.

#zahrnout

/* Definujte typ výčtu - vlastní inicializace pomocí konstantního výrazu
zde se používá konstantní výraz v případě:
A. IO_ERROR a
b. CHYBA SÍTĚ
Toto je neobvyklý způsob definování prvků výčtu; nicméně, toto
program ukazuje, že tento způsob inicializace prvků výčtu je možný v c.
* /


enumChyba{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
CHYBA SÍTĚ= 2 == 2,
PRINT_ERROR
};

inthlavní()
{

/* Deklarujte výčtovou proměnnou*/
enumChyba Hw_Error;

printf ('Nastavení Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

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

printf (' nNastavení Hw_Error na NETWORK_ERROR n');
Hw_Error=CHYBA SÍTĚ;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

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

vrátit se 0;
}

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

Příklad 4: Rozsah výčtu

V tomto příkladu se dozvíte, jak funguje pravidlo rozsahu pro výčet. K definování konstanty namísto výčtu bylo možné použít MACRO (#define), ale pravidlo pro určování rozsahu pro MACRO nefunguje.

#zahrnout

inthlavní()
{

/ * Definujte typ výčtu */
enumChyba_1{
IO_ERROR= 10,
DISK_ERROR,
CHYBA SÍTĚ= 3,
PRINT_ERROR
};


{

/* Definujte typ výčtu ve vnitřním rozsahu*/
enumChyba_1{
IO_ERROR= dvacet,
DISK_ERROR,
CHYBA SÍTĚ= 35,
PRINT_ERROR
};

/* Deklarujte výčtovou proměnnou*/
enumChyba_1 Hw_Error;
printf ('Nastavení Hw_Error na IO_ERROR n');
Hw_Error=IO_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

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

printf (' nNastavení Hw_Error na NETWORK_ERROR n');
Hw_Error=CHYBA SÍTĚ;
printf ('Hodnota Hw_Error = %d n',Hw_Error);

printf (' nNastavení Hw_Error na PRINT_ERROR n');
Hw_Error=PRINT_ERROR;
printf ('Hodnota Hw_Error = %d n',Hw_Error);
}
vrátit se 0;
}

Srovnání výčtu a makra

Výčet Makro
Pro výčet platí pravidlo stanovení rozsahu. Pravidlo určování rozsahu není použitelné pro makra.
Přiřazení výchozí hodnoty výčtu proběhne automaticky.

Enum je velmi užitečné při definování velkého počtu konstant. Kompilátor převezme inicializaci výchozí konstantní hodnoty.

Hodnoty makro konstant musí programátor vždy výslovně uvést.

To může být únavný proces pro velký počet konstant, protože programátor musí při definování makra vždy ručně definovat každou konstantní hodnotu.

Závěr

Program výčtu v C by mohl být považován za volitelnou metodu pro samostatné programy nebo malé projekty, protože programátoři mohou místo výčtu vždy použít makro. Zkušení programátoři však obvykle používají enum přes makro pro rozsáhlé projekty vývoje softwaru. To pomáhá při psaní čistých a čitelných programů.