logo

Enum i C

Enumen i C er også kjent som den oppregnede typen. Det er en brukerdefinert datatype som består av heltallsverdier, og den gir meningsfulle navn til disse verdiene. Bruken av enum i C gjør programmet enkelt å forstå og vedlikeholde. Enum defineres ved å bruke enum nøkkelordet.

Følgende er måten å definere enum i C:

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

I erklæringen ovenfor definerer vi enumet navngitt som flagg som inneholder 'N' heltallskonstanter. Standardverdien for heltall_konst1 er 0, heltall_konst2 er 1, og så videre. Vi kan også endre standardverdien til heltallskonstantene på tidspunktet for deklarasjonen.

For eksempel:

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

Standardverdien for mango er 0, eple er 1, jordbær er 2 og papaya er 3. Hvis vi vil endre disse standardverdiene, kan vi gjøre som gitt nedenfor:

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

Opptalt typeerklæring

Siden vi vet at i C-språket, må vi deklarere variabelen av en forhåndsdefinert type som int, float, char osv. På samme måte kan vi deklarere variabelen til en brukerdefinert datatype, for eksempel enum. La oss se hvordan vi kan deklarere variabelen til en enum-type.

Anta at vi lager opptellingen for typestatus som vist nedenfor:

 enum status{false,true}; 

Nå lager vi variabelen for statustype:

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

I setningen ovenfor har vi erklært 's'-variabelen av typen status.

For å lage en variabel kan de to setningene ovenfor skrives som:

 enum status{false,true} s; 

I dette tilfellet vil standardverdien for usann være lik 0, og verdien for sann vil være lik 1.

La oss lage et enkelt program med 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; } 

I koden ovenfor oppretter vi en enum-type kalt ukedager, og den inneholder navnet på alle de syv dagene. Vi har tildelt 1 verdi til søndagen, og alle andre navn vil få en verdi som forrige verdi pluss én.

Produksjon

Enum i C

La oss demonstrere et annet eksempel for å forstå oppregningen klarere.

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

Produksjon

Enum i C

Noen viktige punkter knyttet til enum

  • Enum-navnene som er tilgjengelige i en enum-type kan ha samme verdi. La oss se på eksemplet.
 #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; } 

Produksjon

Enum i C
  • Hvis vi ikke gir noen verdi til enum-navnene, vil kompilatoren automatisk tildele standardverdiene til enum-navnene fra 0.
  • Vi kan også gi verdiene til enum-navnet i hvilken som helst rekkefølge, og de ikke-tildelte navnene vil få standardverdien som den forrige pluss én.
  • Verdiene som er tilordnet enum-navnene må være integralkonstanter, dvs. de skal ikke være av andre typer, for eksempel streng, float, etc.
  • Alle enum-navnene må være unike i omfanget, det vil si at hvis vi definerer to enum som har samme omfang, bør disse to enumene ha forskjellige enum-navn, ellers vil kompilatoren gi en feil.

La oss forstå dette scenariet gjennom et eksempel.

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

Produksjon

Enum i C
  • I opplisting kan vi definere en opplistet datatype uten navnet også.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

Produksjon

Enum i C

Enum vs. makro i C

  • Makro kan også brukes til å definere navnekonstantene, men i tilfelle en enum kan alle navnekonstantene grupperes sammen i en enkelt setning.
    For eksempel,
    # definer pass 0;
    # definer suksess 1;
    De to setningene ovenfor kan skrives i en enkelt setning ved å bruke enum-typen.
    enum status{pass, suksess};
  • Enum-typen følger omfangsreglene mens makroen ikke følger omfangsreglene.
  • I Enum, hvis vi ikke tildeler verdiene til enum-navnene, vil kompilatoren automatisk tildele standardverdien til enum-navnene. Men når det gjelder makroer, må verdiene tildeles eksplisitt.
  • Typen enum i C er et heltall, men typen makro kan være av hvilken som helst type.