Енум у Ц-у је такође познат као набројани тип. То је кориснички дефинисан тип података који се састоји од целобројних вредности и даје смислена имена тим вредностима. Употреба енума у Ц-у чини програм лаким за разумевање и одржавање. Енум се дефинише коришћењем кључне речи енум.
Следећи начин је да дефинишете енум у Ц:
enum flag{integer_const1, integer_const2,.....integter_constN};
У горњој декларацији дефинишемо енум назван као заставица која садржи 'Н' целобројне константе. Подразумевана вредност интегер_цонст1 је 0, интегер_цонст2 је 1, и тако даље. Такође можемо да променимо подразумевану вредност целобројних константи у време декларације.
На пример:
enum fruits{mango, apple, strawberry, papaya};
Подразумевана вредност за манго је 0, јабука је 1, јагода је 2, а папаја је 3. Ако желимо да променимо ове подразумеване вредности, можемо да урадимо како је дато у наставку:
enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, };
Декларација набројаног типа
Пошто знамо да у језику Ц морамо да декларишемо променљиву унапред дефинисаног типа као што је инт, флоат, цхар, итд. Слично томе, можемо декларисати променљиву кориснички дефинисаног типа података, као што је енум. Хајде да видимо како можемо декларисати променљиву типа енум.
Претпоставимо да креирамо енум статуса типа као што је приказано у наставку:
enum status{false,true};
Сада креирамо променљиву типа статуса:
enum status s; // creating a variable of the status type.
У горњој изјави, декларисали смо променљиву 'с' статуса типа.
Да бисте креирали променљиву, горње две изјаве се могу написати као:
enum status{false,true} s;
У овом случају, подразумевана вредност фалсе биће једнака 0, а вредност труе ће бити једнака 1.
Хајде да направимо једноставан програм енум.
#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; }
У горњем коду креирамо тип енума који се зове радни дани и садржи назив свих седам дана. Недељи смо доделили 1 вредност, а свим осталим именима ће бити дата вредност као претходна вредност плус један.
Излаз
Хајде да демонстрирамо још један пример да бисмо јасније разумели енум.
#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++)>
Излаз
Неке важне тачке везане за енум
- Имена енума доступна у типу енума могу имати исту вредност. Погледајмо пример.
#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; }
Излаз
- Ако називима енума не дамо никакву вредност, компајлер ће аутоматски доделити подразумеване вредности називима енума почевши од 0.
- Такође можемо да обезбедимо вредности за име енума било којим редоследом, а недодељена имена ће добити подразумевану вредност као претходна плус један.
- Вредности додељене именима енума морају бити интегрална константа, тј. не би требало да буду других типова као што су стринг, флоат, итд.
- Сва имена енума морају бити јединствена у свом опсегу, тј. ако дефинишемо два енума која имају исти опсег, онда ова два набрајања треба да имају различита имена енума, иначе ће компајлер испустити грешку.
Хајде да разумемо овај сценарио кроз пример.
#include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', success); return 0; }
Излаз
- У набрајању, можемо дефинисати и набројани тип података без имена.
#include enum {success, fail} status; int main(void) { status=success; printf('The value of status is %d', status); return 0; }
Излаз
Енум наспрам макроа у Ц
- Макро се такође може користити за дефинисање константи имена, али у случају енума, све константе имена могу се груписати заједно у једну изјаву.
На пример,
# дефинише пролаз 0;
# дефинише успех 1;
Горње две изјаве се могу написати у једном исказу коришћењем типа енум.
енум статус{пролаз, успех}; - Тип енума прати правила опсега, док макро не прати правила опсега.
- У Енум-у, ако не доделимо вредности именима енума, компајлер ће аутоматски доделити подразумевану вредност именима енума. Али, у случају макроа, вредности морају бити експлицитно додељене.
- Тип енума у Ц је цео број, али тип макроа може бити било ког типа.
=december;i++)>