C Programování

Jak používat enum v jazyce C

Jak používat enum v jazyce C
Program enum v programovacím jazyce C se používá 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

výčet
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).

Deep Dive into Enum

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

chyba výčtu
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 k definici použít platný identifikátor .

Ve výše uvedeném příkladu kompilátor přiřadí IO_ERROR integrální hodnotě: 0, DISK_ERROR integrální hodnotě: 1 a NETWORK_ERROR integrální hodnotě: 2.  Ve výchozím nastavení je prvnímu prvku výčtu vždy přiřazena hodnota 0, dalšímu prvku výčtu 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, a to následovně:

chyba výčtu
IO_ERROR = 2,
DISK_ERROR,
NETWORK_ERROR = 8 ,
PRINT_ERROR
;

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

Takže teď chápete, jak definovat uživatelsky definovaný typ výčtu v C. Je možné deklarovat proměnnou typu enum (jak můžeme deklarovat proměnnou celočíselného typu)?  Ano to je! Proměnnou enum můžete deklarovat takto:

chyba výčtu Hw_Error;

„Enum“ je zde opět klíčové slovo, „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í enum:

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

Příklad 1: Výchozí výčet Definice Použití

V tomto příkladu se naučíte, jak definovat typ výčtu s výchozími hodnotami konstanty. 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 * /
chyba výčtu
IO_ERROR,
DISK_ERROR,
CHYBA SÍTĚ
;
int main ()

chyba výčtu Hw_Error; / * Vytváření proměnné enum * /
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 = NETWORK_ERROR;
printf ("Hodnota Hw_Error =% d \ n", Hw_Error);
návrat 0;

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

V tomto příkladu se naučíte, jak definovat typ výčtu s vlastní hodnotou konstanty. 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 3rd prvky výčtu (tj.E., IO_ERROR a NETWORK_ERROR), ale přeskočili jsme explicitní inicializaci pro 2nd a 4th elementy. Nyní je odpovědností překladače přiřadit výchozí hodnoty 2nd a 4th prvky výčtu (tj.E., DISK_ERROR a PRINT_ERROR). DISK_ERROR bude přiřazen k hodnotě 3 a PRINT_ERROR bude přiřazen k hodnotě 9. Níže uvidíte ukázkový program a výstup.

#zahrnout
/ * Definujte typ výčtu - vlastní inicializace * /
chyba výčtu
IO_ERROR = 2,
DISK_ERROR,
NETWORK_ERROR = 8,
PRINT_ERROR
;
int main ()

/ * Deklarovat proměnnou enum * /
chyba výčtu 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 = NETWORK_ERROR;
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);
návrat 0;

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

V tomto příkladu se naučíte, jak používat konstantní výraz k definování konstantní hodnoty pro enum prvky.

#zahrnout
/ * Definujte typ výčtu - vlastní inicializaci pomocí konstantního výrazu
konstantní výraz se zde používá v případě:
A. IO_ERROR a
b. CHYBA SÍTĚ
Toto je neobvyklý způsob definování výčtu prvků; nicméně toto
program ukazuje, že tento způsob inicializace enum prvků je možný v c.
* /
chyba výčtu
IO_ERROR = 1 + 2 * 3 + 4,
DISK_ERROR,
NETWORK_ERROR = 2 == 2,
PRINT_ERROR
;
int main ()

/ * Deklarovat proměnnou enum * /
chyba výčtu 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 = NETWORK_ERROR;
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);
návrat 0;

Příklad 4: Enum Scope

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

#zahrnout
int main ()

/ * Definujte typ výčtu * /
enum Error_1
IO_ERROR = 10,
DISK_ERROR,
NETWORK_ERROR = 3,
PRINT_ERROR
;

/ * Definujte typ výčtu ve vnitřním rozsahu * /
enum Error_1
IO_ERROR = 20,
DISK_ERROR,
NETWORK_ERROR = 35,
PRINT_ERROR
;
/ * Deklarovat proměnnou enum * /
enum Error_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 = NETWORK_ERROR;
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);

návrat 0;

Srovnání výčtu a makra

Výčet Makro
Pravidlo oboru platí pro enum. Pravidlo rozsahu není pro Makro použitelné.
Přiřazení výchozí hodnoty výčtu probíhá automaticky.

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

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

To by mohl být zdlouhavý proces pro velké množství 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 jazyce C lze považovat 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 mají tendenci používat enum přes makro pro rozsáhlé projekty vývoje softwaru. To pomáhá při psaní čistých a čitelných programů.

Hry SuperTuxKart pro Linux
SuperTuxKart pro Linux
SuperTuxKart je skvělý titul navržený tak, aby vám ve vašem systému Linux přinesl zážitek Mario Kart zdarma. Je to docela náročné a zábavné hrát, je n...
Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
The Battle for Wesnoth je jednou z nejpopulárnějších strategických her s otevřeným zdrojovým kódem, které si v tuto chvíli můžete zahrát. Tato hra se ...
Hry 0 A.D. Tutorial
0 A.D. Tutorial
Z mnoha strategických her venku je 0 A.D. dokáže vyniknout jako komplexní titul a velmi hluboká, taktická hra, přestože je otevřeným zdrojem. Vývoj hr...