Enum i C er også kendt som den optalte type. Det er en brugerdefineret datatype, der består af heltalsværdier, og den giver meningsfulde navne til disse værdier. Brugen af enum i C gør programmet let at forstå og vedligeholde. Enum defineres ved at bruge nøgleordet enum.
Følgende er måden at definere enum i C:
enum flag{integer_const1, integer_const2,.....integter_constN};
I ovenstående erklæring definerer vi enummet navngivet som flag indeholdende 'N' heltalskonstanter. Standardværdien for integer_const1 er 0, integer_const2 er 1, og så videre. Vi kan også ændre standardværdien af heltalskonstanter på tidspunktet for deklarationen.
For eksempel:
enum fruits{mango, apple, strawberry, papaya};
Standardværdien for mango er 0, æble er 1, jordbær er 2, og papaya er 3. Hvis vi vil ændre disse standardværdier, kan vi gøre som angivet nedenfor:
enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, };
Opregnet typeerklæring
Da vi ved, at i C-sprog, skal vi erklære variablen af en foruddefineret type såsom int, float, char osv. På samme måde kan vi erklære variablen for en brugerdefineret datatype, såsom enum. Lad os se, hvordan vi kan erklære variablen for en enum-type.
Antag, at vi opretter enummet for typestatus som vist nedenfor:
enum status{false,true};
Nu opretter vi variablen af statustype:
enum status s; // creating a variable of the status type.
I ovenstående erklæring har vi erklæret 's'-variablen af typen status.
For at oprette en variabel kan ovenstående to udsagn skrives som:
enum status{false,true} s;
I dette tilfælde vil standardværdien for false være lig med 0, og værdien af sand vil være lig med 1.
Lad os lave et simpelt 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 ovenstående kode opretter vi en enum-type navngivet som ugedage, og den indeholder navnet på alle de syv dage. Vi har tildelt 1 værdi til søndagen, og alle andre navne får en værdi som den foregående værdi plus én.
Produktion
Lad os demonstrere et andet eksempel for at forstå opgørelsen mere klart.
#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++)>
Produktion
Nogle vigtige punkter relateret til enum
- De enum-navne, der er tilgængelige i en enum-type, kan have samme værdi. Lad os se på eksemplet.
#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; }
Produktion
- Hvis vi ikke angiver nogen værdi til enum-navnene, vil compileren automatisk tildele standardværdierne til enum-navnene startende fra 0.
- Vi kan også give værdierne til enum-navnet i en hvilken som helst rækkefølge, og de ikke-tildelte navne vil få standardværdien som den forrige plus en.
- Værdierne tildelt til enum-navnene skal være integralkonstante, dvs. de bør ikke være af andre typer såsom streng, float osv.
- Alle enum-navne skal være unikke i deres omfang, dvs. hvis vi definerer to enums med samme omfang, så bør disse to enums have forskellige enum-navne, ellers vil compileren give en fejl.
Lad os forstå dette scenarie gennem et eksempel.
#include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', success); return 0; }
Produktion
- Ved opregning kan vi også definere en opregnet datatype uden navnet.
#include enum {success, fail} status; int main(void) { status=success; printf('The value of status is %d', status); return 0; }
Produktion
Enum vs. makro i C
- Makro kan også bruges til at definere navnekonstanter, men i tilfælde af en enum kan alle navnekonstanter grupperes sammen i en enkelt sætning.
For eksempel,
# define pass 0;
# definer succes 1;
Ovenstående to udsagn kan skrives i en enkelt udsagn ved at bruge enum-typen.
enum status{bestået, succes}; - Enum-typen følger scope-reglerne, mens makro ikke følger scope-reglerne.
- I Enum, hvis vi ikke tildeler værdierne til enum-navnene, vil compileren automatisk tildele standardværdien til enum-navnene. Men i tilfælde af makro skal værdierne tildeles eksplicit.
- Typen af enum i C er et heltal, men typen af makro kan være af enhver type.
=december;i++)>