TIPUL ENUMERAT
Tipul enumerat permite utilizatorului să folosească în program nume sugestive în locul unor valori numerice. De exemplu, în locul numărului unei luni calendaristice, se poate folosi denumirea ei:
ian
feb
mar
În locul valorilor 0 şi 1 se pot folosi cuvintele FALS şi ADEVRAT.
Prin aceasta, se introduce o mai mare claritate în programe, deoarece valorile numerice sunt înlocuite prin diferite sensuri atribuite lor.
Un tip enumerat se introduce printr-o declaraţie de forma:
enum nume {nume0, nume1, . . . , numen};
Prin această declaraţie se defineşte tipul enumerat nume, iar numei are valoarea i. O formă mai generală a declaraţiei de mai sus permite programatorului să forţeze valorile numelor din acoladă. În acest scop, se pot folosi construcţii de forma:
numei= eci
unde eci este o expresie constantă de tip int.
Cu alte cuvinte, unui nume i se poate atribui o valoare sau valoarea lui coincide cu a numelui precedent mărită cu 1. Dacă primului nume din acoladă nu i se atribuie o valoare, el are valoarea 0. Numele nume0, nume1,. . . , numen trebuie să fie nume diferite. Ele sunt constante şi valoarea lor se stabileşte prin declaraţia în care au fost scrise. Domeniul lor de valabilitate este definit de domeniul de valabilitate al declaraţiei prin care se definesc:
instrucţiunea compusă care conţine declaraţia;
fişierul sursă în care este scrisă declaraţia, dacă este externă oricărei funcţii.
Valorile atribuite lui nume0, nume1, . . . , numen sunt de obicei diferite, dar unele pot să şi coincidă.
După ce s-a introdus un tip enumerat, se pot declara date de tipul respectiv printr-o declaraţie de forma:
enum nume lista_de_variabile;
Datele de tip enumerat se consideră de tip int şi se pot utiliza în program oriunde este legal să apară o dată de tip int.
Observaţii:
1o. Se pot utiliza, ca şi în cazul structurilor, construcţii de forma:
enum nume {nume0, nume1,. . . , numen} lista_de_variabile;
sau
enum { nume0, nume1,. . . , numen} lista_de_variabile;
2o. De asemenea, se poate utiliza construcţia typedef pentru a atribui un nume unui tip enumerat:
typedef enum nume {nume0, nume1,. . . , numen} NUME;
În continuare se pot declara date de tipul NUME, astfel:
NUME lista_de_variabile;
Exemple:
enum luna{ian=1,feb,mar,apr,mai,iun,iul,aug,sep,oct,nov,dec};
enum luna luna_calendaristica
Prin prima declaraţie se introduce tipul enumerat luna. Mulţimea de valori asociate acestui tip este formată din numerele întregi 1,2, . . . , 12. Se pot utiliza denumirile:
ian ia valoarea 1
feb ia valoarea 2
. . .
dec ia valoarea 12
A doua construcţie declară data luna_calendaristica de tipul luna. Ei i se pot atribui valori prin expresii de atribuire de forma:
luna_calendaristica = mar sau
luna_calendaristica = mai + 4
typedef enum {luni, marti,miercuri,joi,vineri,sambata,duminica} ZI;
ZI z;
Variabila z este de tip ZI. Se poate utiliza în expresii de forma:
z=marti;
if(z<sambata) // trateaza ziua de lucru
else // trateaza zi de odihna