logo

Enum în C

Enumerația în C este cunoscută și ca tipul enumerat. Este un tip de date definit de utilizator care constă din valori întregi și oferă nume semnificative acestor valori. Utilizarea enum în C face ca programul să fie ușor de înțeles și de întreținut. Enum este definit prin utilizarea cuvântului cheie enum.

Următoarea este modalitatea de a defini enumerarea în C:

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

În declarația de mai sus, definim enumerarea numită ca flag care conține „N” constante întregi. Valoarea implicită a integer_const1 este 0, integer_const2 este 1 și așa mai departe. De asemenea, putem modifica valoarea implicită a constantelor întregi în momentul declarației.

De exemplu:

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

Valoarea implicită a mango este 0, măr este 1, căpșună este 2 și papaya este 3. Dacă dorim să modificăm aceste valori implicite, atunci putem face după cum se arată mai jos:

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

Declarație de tip enumerată

După cum știm că în limbajul C, trebuie să declarăm variabila unui tip predefinit, cum ar fi int, float, char, etc. În mod similar, putem declara variabila unui tip de date definit de utilizator, cum ar fi enum. Să vedem cum putem declara variabila unui tip enum.

Să presupunem că creăm enumerarea stării tipului așa cum se arată mai jos:

 enum status{false,true}; 

Acum, creăm variabila de tip de stare:

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

În declarația de mai sus, am declarat variabila „s” de tip stare.

Pentru a crea o variabilă, cele două instrucțiuni de mai sus pot fi scrise astfel:

 enum status{false,true} s; 

În acest caz, valoarea implicită a lui false va fi egală cu 0, iar valoarea lui adevărat va fi egală cu 1.

Să creăm un program simplu de enumerare.

 #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; } 

În codul de mai sus, creăm un tip de enumerare numit zile lucrătoare și conține numele tuturor celor șapte zile. Am atribuit 1 valoare zilei de duminică și tuturor celorlalte nume li se va da o valoare ca valoarea anterioară plus unu.

Ieșire

Enum în C

Să demonstrăm un alt exemplu pentru a înțelege mai clar enumerarea.

 #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++)>

Ieșire

Enum în C

Câteva puncte importante legate de enumerare

  • Numele de enumerare disponibile într-un tip de enumerare pot avea aceeași valoare. Să ne uităm la exemplu.
 #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; } 

Ieșire

Enum în C
  • Dacă nu furnizăm nicio valoare numelor de enumerare, atunci compilatorul va atribui automat valorile implicite numelor de enumerare începând de la 0.
  • De asemenea, putem furniza valorile numelui enumerarii în orice ordine, iar numele nealocate vor primi valoarea implicită ca cea anterioară plus unu.
  • Valorile atribuite numelor enumerate trebuie să fie constantă integrală, adică nu ar trebui să fie de alte tipuri, cum ar fi șir, float etc.
  • Toate numele de enumerare trebuie să fie unice în domeniul lor, adică dacă definim două enumerari având același domeniu de aplicare, atunci aceste două enumerari ar trebui să aibă nume de enumerare diferite, altfel compilatorul va produce o eroare.

Să înțelegem acest scenariu printr-un exemplu.

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

Ieșire

Enum în C
  • În enumerare, putem defini un tip de date enumerate și fără nume.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

Ieșire

Enum în C

Enum vs. Macro în C

  • Macro poate fi folosit și pentru a defini constantele nume, dar în cazul unei enumerari, toate constantele nume pot fi grupate într-o singură instrucțiune.
    De exemplu,
    # definiți trecerea 0;
    # definiți succesul 1;
    Cele două instrucțiuni de mai sus pot fi scrise într-o singură instrucțiune folosind tipul enum.
    stare enumerare{trece, succes};
  • Tipul de enumerare urmează regulile domeniului, în timp ce macro nu urmează regulile domeniului.
  • În Enum, dacă nu atribuim valorile numelor enumerate, atunci compilatorul va atribui automat valoarea implicită numelor enumerate. Dar, în cazul macro, valorile trebuie atribuite explicit.
  • Tipul de enumerare în C este un număr întreg, dar tipul de macro poate fi de orice tip.