logo

Enumerazione in C

L'enumerazione in C è anche nota come tipo enumerato. È un tipo di dati definito dall'utente costituito da valori interi e fornisce nomi significativi a questi valori. L'uso di enum in C rende il programma facile da comprendere e mantenere. L'enumerazione viene definita utilizzando la parola chiave enum.

Di seguito è riportato il modo per definire l'enumerazione in C:

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

Nella dichiarazione precedente, definiamo l'enumerazione denominata come flag contenente costanti intere 'N'. Il valore predefinito di integer_const1 è 0, integer_const2 è 1 e così via. Possiamo anche modificare il valore predefinito delle costanti intere al momento della dichiarazione.

Per esempio:

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

Il valore predefinito di mango è 0, mela è 1, fragola è 2 e papaya è 3. Se vogliamo modificare questi valori predefiniti, possiamo fare come indicato di seguito:

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

Dichiarazione di tipo enumerato

Come sappiamo, nel linguaggio C, dobbiamo dichiarare la variabile di un tipo predefinito come int, float, char, ecc. Allo stesso modo, possiamo dichiarare la variabile di un tipo di dati definito dall'utente, come enum. Vediamo come possiamo dichiarare la variabile di tipo enum.

Supponiamo di creare l'enumerazione di tipo status come mostrato di seguito:

 enum status{false,true}; 

Ora creiamo la variabile di tipo status:

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

Nell'istruzione precedente, abbiamo dichiarato la variabile 's' di tipo status.

Per creare una variabile, le due istruzioni precedenti possono essere scritte come:

 enum status{false,true} s; 

In questo caso, il valore predefinito di false sarà uguale a 0 e il valore di true sarà uguale a 1.

Creiamo un semplice programma di 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; } 

Nel codice precedente creiamo un tipo enum denominato giorni feriali e contiene il nome di tutti i sette giorni. Abbiamo assegnato 1 valore alla domenica e a tutti gli altri nomi verrà assegnato un valore uguale al valore precedente più uno.

Produzione

Enumerazione in C

Dimostriamo un altro esempio per comprendere l'enumerazione più chiaramente.

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

Produzione

Enumerazione in C

Alcuni punti importanti relativi a enum

  • I nomi enum disponibili in un tipo enum possono avere lo stesso valore. Diamo un'occhiata all'esempio.
 #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; } 

Produzione

Enumerazione in C
  • Se non forniamo alcun valore ai nomi delle enumerazioni, il compilatore assegnerà automaticamente i valori predefiniti ai nomi delle enumerazioni a partire da 0.
  • Possiamo anche fornire i valori al nome enum in qualsiasi ordine e i nomi non assegnati riceveranno il valore predefinito come quello precedente più uno.
  • I valori assegnati ai nomi enum devono essere costanti integrali, ovvero non devono essere di altri tipi come string, float, ecc.
  • Tutti i nomi enum devono essere univoci nel loro ambito, ovvero, se definiamo due enum con lo stesso ambito, queste due enum dovrebbero avere nomi enum diversi altrimenti il ​​compilatore genererà un errore.

Cerchiamo di comprendere questo scenario attraverso un esempio.

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

Produzione

Enumerazione in C
  • Nell'enumerazione, possiamo definire un tipo di dati enumerato anche senza il nome.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

Produzione

Enumerazione in C

Enum contro Macro in C

  • La macro può essere utilizzata anche per definire le costanti del nome, ma nel caso di un'enumerazione, tutte le costanti del nome possono essere raggruppate insieme in un'unica istruzione.
    Per esempio,
    # definisce il passaggio 0;
    # definisce il successo 1;
    Le due istruzioni precedenti possono essere scritte in un'unica istruzione utilizzando il tipo enum.
    enum status{pass, success};
  • Il tipo enum segue le regole dell'ambito mentre la macro non segue le regole dell'ambito.
  • In Enum, se non assegniamo i valori ai nomi enum, il compilatore assegnerà automaticamente il valore predefinito ai nomi enum. Ma, nel caso della macro, i valori devono essere assegnati esplicitamente.
  • Il tipo di enum in C è un numero intero, ma il tipo di macro può essere di qualsiasi tipo.