logo

Enum C-ben

A C-beli enum-ot felsorolt ​​típusnak is nevezik. Ez egy felhasználó által definiált adattípus, amely egész értékekből áll, és értelmes neveket ad ezeknek az értékeknek. Az enum használata a C nyelvben megkönnyíti a program megértését és karbantartását. Az enum meghatározása az enum kulcsszó használatával történik.

A következőképpen határozható meg az enum C-ben:

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

A fenti deklarációban a megnevezett enumot jelzőként definiáljuk, amely 'N' egész szám állandót tartalmaz. Az integer_const1 alapértelmezett értéke 0, integer_const2 értéke 1, és így tovább. Megváltoztathatjuk az egész konstansok alapértelmezett értékét is a deklaráció időpontjában.

Például:

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

A mangó alapértelmezett értéke 0, az alma 1, az eper 2 és a papaya 3. Ha meg akarjuk változtatni ezeket az alapértelmezett értékeket, akkor az alábbiak szerint tehetjük meg:

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

Felsorolt ​​típusnyilatkozat

Mint tudjuk, hogy a C nyelvben egy előre definiált típusú változót kell deklarálnunk, mint pl. int, float, char stb. Hasonlóképpen deklarálhatjuk egy felhasználó által definiált adattípus változóját is, mint például az enum. Nézzük meg, hogyan deklarálhatjuk egy enum típusú változót.

Tegyük fel, hogy létrehozzuk a típusállapot számsorát az alábbiak szerint:

 enum status{false,true}; 

Most létrehozzuk az állapottípus változóját:

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

A fenti utasításban az 's' típusú változót deklaráltuk.

Változó létrehozásához a fenti két utasítás a következőképpen írható:

 enum status{false,true} s; 

Ebben az esetben a false alapértelmezett értéke 0, az igaz értéke pedig 1 lesz.

Készítsünk egy egyszerű enum programot.

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

A fenti kódban létrehozunk egy enum típust hétköznapoknak, és ez tartalmazza mind a hét nap nevét. A vasárnaphoz 1 értéket rendeltünk, a többi név pedig az előző plusz egy értéket kapja.

Kimenet

Enum C-ben

Mutassunk egy másik példát az enum pontosabb megértéséhez.

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

Kimenet

Enum C-ben

Néhány fontos pont az enummal kapcsolatban

  • Az adott enumtípusban elérhető enumnevek azonos értékűek lehetnek. Nézzük a példát.
 #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; } 

Kimenet

Enum C-ben
  • Ha nem adunk meg értéket az enum-nevekhez, akkor a fordító automatikusan hozzárendeli az alapértelmezett értékeket az enum-nevekhez 0-tól kezdve.
  • Az enum nevéhez tetszőleges sorrendben is megadhatjuk az értékeket, és a hozzá nem rendelt nevek az előző plusz egy alapértelmezett értéket kapják.
  • Az enum-nevekhez rendelt értékeknek integrálkonstansnak kell lenniük, azaz nem lehetnek más típusúak, például string, float stb.
  • Az összes enum névnek egyedinek kell lennie a hatókörében, azaz ha két azonos hatókörű enumot definiálunk, akkor ennek a két enumnak eltérő enumnévvel kell rendelkeznie, különben a fordító hibát dob.

Értsük meg ezt a forgatókönyvet egy példán keresztül.

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

Kimenet

Enum C-ben
  • A felsorolásban definiálhatunk egy felsorolt ​​adattípust név nélkül is.
 #include enum {success, fail} status; int main(void) { status=success; printf(&apos;The value of status is %d&apos;, status); return 0; } 

Kimenet

Enum C-ben

Enum kontra makró C-ben

  • A makró a névkonstansok meghatározására is használható, de enum esetén az összes névkonstans egyetlen utasításba csoportosítható.
    Például,
    # definiálja a 0. lépést;
    # a siker meghatározása 1;
    A fenti két állítás egyetlen utasításba írható az enum típus használatával.
    enum állapot{megfelel, siker};
  • Az enum típus követi a hatókör szabályait, míg a makró nem követi a hatókör szabályait.
  • Az Enum-ban, ha nem rendelünk értékeket az enum-nevekhez, akkor a fordító automatikusan az alapértelmezett értéket rendeli az enum-nevekhez. De makró esetén az értékeket kifejezetten hozzá kell rendelni.
  • Az enum típusa C-ben egész szám, de a makró típusa bármilyen típusú lehet.