Enum u C-u također je poznat kao nabrojani tip. To je korisnički definiran tip podataka koji se sastoji od cjelobrojnih vrijednosti i daje smislena imena tim vrijednostima. Korištenje enuma u C-u čini program lakim za razumijevanje i održavanje. Enum se definira korištenjem ključne riječi enum.
Sljedeći je način definiranja enuma u C-u:
enum flag{integer_const1, integer_const2,.....integter_constN};
U gornjoj deklaraciji definiramo enum nazvan kao zastavica koja sadrži 'N' cjelobrojnih konstanti. Zadana vrijednost integer_const1 je 0, integer_const2 je 1 itd. Također možemo promijeniti zadanu vrijednost konstanti cijelog broja u vrijeme deklaracije.
Na primjer:
enum fruits{mango, apple, strawberry, papaya};
Zadana vrijednost za mango je 0, jabuka je 1, jagoda je 2, a papaja je 3. Ako želimo promijeniti ove zadane vrijednosti, možemo učiniti kako je navedeno u nastavku:
enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, };
Deklaracija nabrojanog tipa
Kao što znamo da u jeziku C trebamo deklarirati varijablu unaprijed definiranog tipa kao što su int, float, char itd. Slično, možemo deklarirati varijablu korisnički definiranog tipa podataka, kao što je enum. Pogledajmo kako možemo deklarirati varijablu tipa enum.
Pretpostavimo da kreiramo enum tipa status kao što je prikazano u nastavku:
enum status{false,true};
Sada kreiramo varijablu tipa statusa:
enum status s; // creating a variable of the status type.
U gornjoj izjavi, deklarirali smo 's' varijablu tipa status.
Za stvaranje varijable, gornje dvije izjave mogu se napisati kao:
enum status{false,true} s;
U ovom slučaju, zadana vrijednost false bit će jednaka 0, a vrijednost true bit će jednaka 1.
Kreirajmo jednostavan program enum.
#include enum weekdays{Sunday=1, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}; int main() { enum weekdays w; // variable declaration of weekdays type w=Monday; // assigning value of Monday to w. printf('The value of w is %d',w); return 0; }
U gornjem kodu stvaramo enum tip nazvan kao dani u tjednu i sadrži naziv svih sedam dana. Nedjelji smo dodijelili 1 vrijednost, a sva ostala imena dobit će vrijednost kao prethodna vrijednost plus jedan.
Izlaz
Pokažimo još jedan primjer kako bismo jasnije razumjeli enum.
#include enum months{jan=1, feb, march, april, may, june, july, august, september, october, november, december}; int main() { // printing the values of months for(int i=jan;i<=december;i++) { printf('%d, ',i); } return 0; < pre> <p>In the above code, we have created a type of enum named as months which consists of all the names of months. We have assigned a '1' value, and all the other months will be given a value as the previous one plus one. Inside the main() method, we have defined a for loop in which we initialize the 'i' variable by jan, and this loop will iterate till December.</p> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-2.webp" alt="Enum in C"> <h3>Why do we use enum?</h3> <p>The enum is used when we want our variable to have only a set of values. For example, we create a direction variable. As we know that four directions exist (North, South, East, West), so this direction variable will have four possible values. But the variable can hold only one value at a time. If we try to provide some different value to this variable, then it will throw the compilation error.</p> <p>The enum is also used in a switch case statement in which we pass the enum variable in a switch parenthesis. It ensures that the value of the case block should be defined in an enum.</p> <p> <strong>Let's see how we can use an enum in a switch case statement.</strong> </p> <pre> #include enum days{sunday=1, monday, tuesday, wednesday, thursday, friday, saturday}; int main() { enum days d; d=monday; switch(d) { case sunday: printf('Today is sunday'); break; case monday: printf('Today is monday'); break; case tuesday: printf('Today is tuesday'); break; case wednesday: printf('Today is wednesday'); break; case thursday: printf('Today is thursday'); break; case friday: printf('Today is friday'); break; case saturday: printf('Today is saturday'); break; } return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-3.webp" alt="Enum in C"> <p> <strong>Some important points related to enum</strong> </p> <ul> <li>The enum names available in an enum type can have the same value. Let's look at the example.</li> </ul> <pre> #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf('The value of mango is %d', mango); printf(' The value of apple is %d', apple); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-4.webp" alt="Enum in C"> <ul> <li>If we do not provide any value to the enum names, then the compiler will automatically assign the default values to the enum names starting from 0.</li> <li>We can also provide the values to the enum name in any order, and the unassigned names will get the default value as the previous one plus one.</li> <li>The values assigned to the enum names must be integral constant, i.e., it should not be of other types such string, float, etc.</li> <li>All the enum names must be unique in their scope, i.e., if we define two enum having same scope, then these two enums should have different enum names otherwise compiler will throw an error.</li> </ul> <p> <strong>Let's understand this scenario through an example.</strong> </p> <pre> #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', success); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-5.webp" alt="Enum in C"> <ul> <li>In enumeration, we can define an enumerated data type without the name also.</li> </ul> <pre> #include enum {success, fail} status; int main(void) { status=success; printf('The value of status is %d', status); return 0; } </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/c-tutorial/73/enum-c-6.webp" alt="Enum in C"> <h3>Enum vs. Macro in C</h3> <ul> <li>Macro can also be used to define the name constants, but in case of an enum, all the name constants can be grouped together in a single statement. <br> For example, <br> # define pass 0; <br> # define success 1; <br> The above two statements can be written in a single statement by using the enum type. <br> enum status{pass, success};</li> <li>The enum type follows the scope rules while macro does not follow the scope rules.</li> <li>In Enum, if we do not assign the values to the enum names, then the compiler will automatically assign the default value to the enum names. But, in the case of macro, the values need to be explicitly assigned.</li> <li>The type of enum in C is an integer, but the type of macro can be of any type.</li> </ul> <hr></=december;i++)>
Izlaz
Neke važne točke vezane uz enum
- Nazivi enuma dostupni u tipu enuma mogu imati istu vrijednost. Pogledajmo primjer.
#include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf('The value of mango is %d', mango); printf(' The value of apple is %d', apple); return 0; }
Izlaz
- Ako nazivima enuma ne damo nikakvu vrijednost, tada će prevodilac automatski dodijeliti zadane vrijednosti nazivima enuma počevši od 0.
- Također možemo dati vrijednosti imenu enuma bilo kojim redoslijedom, a nedodijeljena imena dobit će zadanu vrijednost kao prethodna plus jedan.
- Vrijednosti dodijeljene nazivima enuma moraju biti integralne konstante, tj. ne bi trebale biti drugih vrsta kao što su string, float itd.
- Sva imena enuma moraju biti jedinstvena u svom opsegu, tj. ako definiramo dva enuma koji imaju isti opseg, tada bi ta dva enuma trebala imati različita enum imena inače će prevodilac izbaciti pogrešku.
Razmotrimo ovaj scenarij kroz primjer.
#include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', success); return 0; }
Izlaz
- Kod nabrajanja možemo definirati nabrojani tip podataka i bez naziva.
#include enum {success, fail} status; int main(void) { status=success; printf('The value of status is %d', status); return 0; }
Izlaz
Enum u odnosu na makro u C
- Makro se također može koristiti za definiranje konstanti imena, ali u slučaju enuma, sve konstante imena mogu se grupirati zajedno u jednu izjavu.
Na primjer,
# definirati prolaz 0;
# definirati uspjeh 1;
Gornje dvije izjave mogu se napisati u jednoj izjavi korištenjem tipa enum.
enum status{prolaz, uspjeh}; - Enum tip slijedi pravila opsega dok makro ne slijedi pravila opsega.
- U Enumu, ako ne dodijelimo vrijednosti nazivima enuma, tada će prevodilac automatski dodijeliti zadanu vrijednost nazivima enuma. Ali, u slučaju makronaredbe, vrijednosti moraju biti eksplicitno dodijeljene.
- Tip enuma u C-u je cijeli broj, ali tip makronaredbe može biti bilo kojeg tipa.
=december;i++)>