C:n enum tunnetaan myös numeroituna tyyppinä. Se on käyttäjän määrittämä tietotyyppi, joka koostuu kokonaislukuarvoista ja antaa niille merkitykselliset nimet. Enumin käyttö C:ssä tekee ohjelman ymmärtämisestä ja ylläpidosta helppoa. Enum määritellään enum-avainsanalla.
Seuraava tapa määritellä enum C:ssä:
enum flag{integer_const1, integer_const2,.....integter_constN};
Yllä olevassa ilmoituksessa määritämme enum-nimisen lipuksi, joka sisältää 'N' kokonaislukuvakiota. Kokonaisluku_vakio1:n oletusarvo on 0, kokonaisluku_vakio2 on 1 ja niin edelleen. Voimme myös muuttaa kokonaislukuvakioiden oletusarvoa ilmoitushetkellä.
Esimerkiksi:
enum fruits{mango, apple, strawberry, papaya};
Mangon oletusarvo on 0, omena on 1, mansikka on 2 ja papaija on 3. Jos haluamme muuttaa näitä oletusarvoja, voimme tehdä seuraavasti:
enum fruits{ mango=2, apple=1, strawberry=5, papaya=7, };
Numeroitu tyyppiilmoitus
Kuten tiedämme, C-kielessä meidän täytyy ilmoittaa ennalta määrätyn tyypin muuttuja, kuten int, float, char jne. Samoin voimme ilmoittaa käyttäjän määrittämän tietotyypin muuttujan, kuten enum. Katsotaanpa, kuinka voimme ilmoittaa enum-tyypin muuttujan.
Oletetaan, että luomme tyypin statusluettelon alla olevan kuvan mukaisesti:
enum status{false,true};
Nyt luomme tilatyypin muuttujan:
enum status s; // creating a variable of the status type.
Yllä olevassa lauseessa olemme ilmoittaneet tyypin status muuttujan 's'.
Muuttujan luomiseksi yllä olevat kaksi lausetta voidaan kirjoittaa seuraavasti:
enum status{false,true} s;
Tässä tapauksessa false oletusarvo on 0 ja tosi arvo on 1.
Luodaan yksinkertainen enum-ohjelma.
#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; }
Yllä olevaan koodiin luomme enum-tyypin, jonka nimi on viikonpäivät, ja se sisältää kaikkien seitsemän päivän nimet. Olemme määrittäneet sunnuntaille 1 arvon, ja kaikille muille nimille annetaan arvo edellisenä arvona plus yksi.
Lähtö
Esitetään toinen esimerkki ymmärtääksemme enum selkeämmin.
#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++)>
Lähtö
Muutamia tärkeitä enumiin liittyviä seikkoja
- Enum-tyypissä käytettävissä olevilla enum-nimillä voi olla sama arvo. Katsotaanpa esimerkkiä.
#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; }
Lähtö
- Jos emme anna mitään arvoa enum-nimille, kääntäjä määrittää automaattisesti oletusarvot enum-nimille alkaen 0.
- Voimme myös antaa arvot enum-nimelle missä tahansa järjestyksessä, ja määrittämättömät nimet saavat oletusarvon edellinen plus yksi.
- Enum-nimille annettujen arvojen tulee olla integraalivakioita, eli ne eivät saa olla muun tyyppisiä, kuten merkkijono, float jne.
- Kaikkien enum-nimien on oltava laajuudeltaan ainutlaatuisia, eli jos määrittelemme kaksi enumia, joilla on sama laajuus, näillä kahdella enumilla tulisi olla eri enum-nimet, muuten kääntäjä antaa virheen.
Ymmärretään tämä skenaario esimerkin kautta.
#include enum status{success, fail}; enum boolen{fail,pass}; int main(void) { printf('The value of success is %d', success); return 0; }
Lähtö
- Luettelossa voimme määritellä lueteltu tietotyyppi myös ilman nimeä.
#include enum {success, fail} status; int main(void) { status=success; printf('The value of status is %d', status); return 0; }
Lähtö
Enum vs. makro C
- Makroa voidaan käyttää myös nimivakioiden määrittämiseen, mutta jos kyseessä on enum, kaikki nimivakiot voidaan ryhmitellä yhteen lauseeseen.
Esimerkiksi,
# määrittele läpäisy 0;
# määrittele menestys 1;
Yllä olevat kaksi lausetta voidaan kirjoittaa yhdeksi lauseeksi käyttämällä enum-tyyppiä.
enum status{hyväksytty, menestys}; - Enum-tyyppi noudattaa laajuussääntöjä, kun taas makro ei noudata laajuussääntöjä.
- Jos emme määritä Enumissa arvoja enum-nimille, kääntäjä määrittää automaattisesti oletusarvon enum-nimille. Mutta makron tapauksessa arvot on määritettävä nimenomaisesti.
- C:n enum-tyyppi on kokonaisluku, mutta makron tyyppi voi olla mikä tahansa.
=december;i++)>