logo

Enum в C

Перелік у C також відомий як перерахований тип. Це визначений користувачем тип даних, який складається з цілих значень, і він надає змістовні імена цим значенням. Використання enum у C робить програму легкою для розуміння та підтримки. Перелік визначається за допомогою ключового слова enum.

Нижче наведено спосіб визначення переліку в C:

 enum flag{integer_const1, integer_const2,.....integter_constN}; 

У наведеній вище декларації ми визначаємо перелік, названий як прапорець, що містить 'N' цілих констант. Значення за замовчуванням integer_const1 дорівнює 0, integer_const2 дорівнює 1 і так далі. Ми також можемо змінити значення за замовчуванням цілих констант під час оголошення.

Наприклад:

 enum fruits{mango, apple, strawberry, papaya}; 

Значення за замовчуванням манго — 0, яблуко — 1, полуниця — 2 і папайя — 3. Якщо ми хочемо змінити ці значення за замовчуванням, ми можемо зробити, як зазначено нижче:

 enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, }; 

Оголошення перерахованого типу

Як відомо, у мові C нам потрібно оголосити змінну попередньо визначеного типу, наприклад int, float, char тощо. Подібним чином ми можемо оголосити змінну визначеного користувачем типу даних, наприклад enum. Давайте подивимося, як ми можемо оголосити змінну типу enum.

Припустімо, ми створюємо перелік типу status, як показано нижче:

 enum status{false,true}; 

Тепер створюємо змінну типу status:

 enum status s; // creating a variable of the status type. 

У наведеному вище операторі ми оголосили змінну 's' типу status.

Щоб створити змінну, наведені вище два оператори можна записати так:

 enum status{false,true} s; 

У цьому випадку значення false за замовчуванням дорівнюватиме 0, а значення true буде дорівнювати 1.

Давайте створимо просту програму 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; } 

У наведеному вище коді ми створюємо тип переліку з іменем тижні, і він містить назву всіх семи днів. Ми призначили 1 значення для неділі, а всі інші імена отримають значення як попереднє значення плюс один.

Вихід

Enum в C

Давайте продемонструємо ще один приклад, щоб більш чітко зрозуміти перелік.

 #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 &apos;1&apos; 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 &apos;i&apos; 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&apos;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(&apos;Today is sunday&apos;); break; case monday: printf(&apos;Today is monday&apos;); break; case tuesday: printf(&apos;Today is tuesday&apos;); break; case wednesday: printf(&apos;Today is wednesday&apos;); break; case thursday: printf(&apos;Today is thursday&apos;); break; case friday: printf(&apos;Today is friday&apos;); break; case saturday: printf(&apos;Today is saturday&apos;); 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&apos;s look at the example.</li> </ul> <pre> #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf(&apos;The value of mango is %d&apos;, mango); printf(&apos;
The value of apple is %d&apos;, 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&apos;s understand this scenario through an example.</strong> </p> <pre> #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf(&apos;The value of success is %d&apos;, 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(&apos;The value of status is %d&apos;, 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++)>

Вихід

Enum в C

Деякі важливі моменти, пов'язані з enum

  • Імена переліку, доступні в типі переліку, можуть мати однакове значення. Розглянемо приклад.
 #include int main(void) { enum fruits{mango = 1, strawberry=0, apple=1}; printf(&apos;The value of mango is %d&apos;, mango); printf(&apos;
The value of apple is %d&apos;, apple); return 0; } 

Вихід

Enum в C
  • Якщо ми не надаємо жодного значення назвам переліків, компілятор автоматично призначить значення за замовчуванням іменам переліків, починаючи з 0.
  • Ми також можемо надати значення для імені переліку в будь-якому порядку, і непризначені імена отримають значення за замовчуванням як попереднє плюс один.
  • Значення, присвоєні іменам переліків, мають бути цілісними константами, тобто не мають бути інших типів, таких як string, float тощо.
  • Усі назви переліків мають бути унікальними у своїй області видимості, тобто якщо ми визначаємо два переліки з однаковою областю видимості, то ці два переліки повинні мати різні назви переліків, інакше компілятор видасть помилку.

Розберемо цей сценарій на прикладі.

 #include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf(&apos;The value of success is %d&apos;, success); return 0; } 

Вихід

Enum в C
  • У переліку ми також можемо визначити перерахований тип даних без імені.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

Вихід

Enum в C

Enum проти макросу в C

  • Макрос також можна використовувати для визначення констант імен, але у випадку переліку всі константи імен можна згрупувати в одному операторі.
    Наприклад,
    # визначити пропуск 0;
    # визначити успіх 1;
    Наведені вище два оператори можна записати в одному операторі за допомогою типу enum.
    enum status{pass, success};
  • Тип enum відповідає правилам області дії, а макрос не відповідає правилам області дії.
  • Якщо в Enum ми не призначимо значення іменам переліків, то компілятор автоматично призначить значення за замовчуванням іменам переліків. Але у випадку макросу значення потрібно призначати явно.
  • Тип переліку в C є цілим числом, але тип макросу може бути будь-яким.