5.1.25 · D1 · Coding › C Programming › Enumerations
Parent note ki ek bhi line samajhne se pehle, tumhe un choti-choti ideas ki alphabet mein fluent hona chahiye jo woh silently assume karta hai. Yeh page un sabko kuch nahi se build karta hai, usi order mein jisme ek doosre pe depend karte hain.
Picture: socho ek numbered lockers ki row jo left aur right dono taraf jaati hai. Har locker apne agle se ek whole step door hai — tum locker 3 pe khade ho sakte ho, lekin locker 3 aur locker 4 ke beech mein kabhi nahi.
Topic ko iske liye kyun chahiye: har enum naam secretly inhi lockers mein se ek hota hai. Jab parent note kehta hai "ek enum sirf ints hai", matlab har naam exactly ek whole-number locker se glued hai. Agar integer ke baare mein shaky ho, toh dekho Integer Types in C.
Picture: ek locker jiska darwaza locker 5 pe weld karke band kar diya gaya ho. Tum ise dekh sakte ho, point kar sakte ho, iska number use kar sakte ho — lekin tum us naam ko kabhi kisi dusre locker ka matlab nahi bana sakte.
Topic ko iske liye kyun chahiye: har enumerator (agle section mein define hoga) ek constant hota hai. Jab ek baar naam 0 ka matlab ho jaye, toh hamesha 0 ka hi matlab rahega. Yeh ek variable se alag hai, jo ek aisa locker hota hai jiske contents tum swap kar sakte ho.
Picture: enum jars ki ek row hai; apne naam-label ke saath har jar ek enumerator hai. RED jar-0 ka label hai, GREEN jar-1 ka label hai, wagera.
Topic ko iske liye kyun chahiye: poora parent note enumerators ke baare mein hi hai — Section 7 mein recurrence, value(...) mapping, switch cases aur array-index trick sab enumerators pe operate karte hain. Jab tak yeh nahi pata ki symbol ek ka matlab "(k)-va enumerator" hai, ek bhi formula follow nahi kar sakte. Hum ek ko formally define karenge jab Section 6 mein subscript tak pahunchenge.
Hum "enum" word baar baar use kar chuke hain — ab ise C language ke ek real piece ke roop mein pin karte hain.
Picture: enumeration poori labelled shelf hai; uske upar har jar ek enumerator hai. enum woh sign hai jo shelf ke upar laga hai aur announce karta hai "yeh named numbers ki shelf hai".
Declaration ki anatomy, piece by piece:
keyword: "named-int list aane wala hai"enumtype ka tag/naamColorenumerators{ RED, GREEN, BLUE }
enum — woh keyword jo har enumeration start karta hai.
Color — tag, is new type ka ek optional naam taaki baad mein enum Color c; declare kar sako.
{ ... } — braces jo comma-separated enumerators hold karte hain.
Topic ko iske liye kyun chahiye: parent ke har example mein enum se shuru hota hai. Jab tak yeh nahi pata ki yeh ek keyword hai (koi naam nahi jo tumne banaya) aur "enumeration" matlab poora group jabki "enumerator" matlab ek member, tab tak yeh sentence ki "ek enum ek naya integer type declare karta hai jiske values enumerators ki list hain" ek uljhan hai. enum Color c; se enum word chhod ke sirf Color c; likhne ke liye, dekho typedef.
Picture: number se naam ki taraf point karta ek arrow — number andar aata hai aur chipak jaata hai.
enumerator naamRED"stand karta hai"=value0
Topic ko iske liye kyun chahiye: parent ke "explicit values" (OK = 1) isi pe rely karte hain. Agar yeh difference miss karo toh WARN = 5 ordinary assignment lagega jabki yeh actually naam ko number se ek baar ke liye weld karna hai.
Picture: lockers alag sizes aur shapes mein aate hain. Ek char locker chota hai; ek int locker bada hai; ek enum Color locker int jaite hi size ka hai lekin ek sticky label pehne hua hai jo kehta hai "yahaan colours rehte hain".
Topic ko iske liye kyun chahiye: parent kehta hai "ek enum ek naya integer type declare karta hai". Bina yeh jaane ki type kya hota hai, woh sentence khokha hai. Aur yeh parent ki teesri mistake explain karta hai: enum Color ek int-sized box pe ek label hai, koi locked vault nahi — tum phir bhi usme 99 thoos sakte ho.
Yahaan notation ke teen pieces naye hain. Inhe ek ek karke samjhte hain.
Picture: named jars ki ek line mein shelf. e0 sabse left wala jar hai, e1 agla, wagera. Subscript har jar ke neeche ka label hai jo batata hai woh kis slot mein hai — iska matlab yeh nahi ki andar kya hai.
Picture:value(…)jar ke saamne se number padhna hai. Kisi jar (enumerator) ko point karo, aur value uska locker number batata hai.
Picture: dominos. Jab ek baar pehle jar ki value 0 fix ho jaaye, har agle jar apne left neighbour ka number padh ke 1 add karta hai. Pehle ko girao, sab apni jagah par aa jaate hain.
"+1 kyun, ×2 ya +2 kyun nahi"? Kyunki yahi rule C standard ne choose kiya: woh chahta tha sabse simple, sabse predictable count — 0, 1, 2, 3 — taaki array indices aur enum values perfectly line up hon. Koi aur step parent ke example 4 ka array-sizing trick tod deta.
Parent ke printf(...) lines padhne se pehle, humein function call ki shape hi chahiye — parent assume karta hai ise, toh hum ise yahaan build karte hain.
Picture: ek vending machine. Naam machine hai; parentheses coin-slot hain; har argument ek coin hai jo tum andar dalte ho. Button dabao aur result (yahaan, printed text) bahar aata hai.
Picture:%d ek number ke shape ka stencil hai. Tum jo bhi isme daalte ho woh digits ke roop mein bahar aata hai — kabhi letters ya names ke roop mein nahi.
Topic ko iske liye kyun chahiye: parent ki pehli badi mistake — "enum print karne par uska naam milta hai" — yahaan khatam hoti hai. printf("%d", RED)number0 ko number-stencil se pour karta hai, toh tum 0 dekhte ho, kabhi "RED" nahi. Machine ke andar print karne ke liye koi naam hi nahi hai.
Picture: ek egg carton. Box 0, box 1, box 2 ... tum [ ] ke andar slot number likh ke point karte ho.
Topic ko iske liye kyun chahiye: parent ka example int days[MONTH_COUNT]; us enumerator ki value (3) ko array-creation brackets ke andar size ke roop mein use karta hai, aur enum names ko usmein indices ke roop mein. Enum ka 0-se-count aur array ka 0-se-count deliberately same hai, yahi MONTH_COUNT sentinel trick ko kaam karta hai. Dekho Arrays in C.
Map padhne ka tarika: har arrow ka matlab hai "arrow ki tail wali cheez pehle samajh lo, tabhi head wali cheez samajh mein aayegi." Arrows follow karo aur tum literally safe learning order mein chal rahe ho — un boxes se shuru karo jinmein koi incoming arrow nahi (Integer), aur har box jo tum reach karo woh sirf aisi ideas use karega jo tum pehle se pass kar chuke ho. Node Enumeration enum destination hai: dekho kaise is page ki har foundation eventually usmein feed hoti hai, isi liye pehle inhe build karna pada.
Left ka har box is page ne zero se banaya hai; mil ke yeh sab enumeration ki parent idea ko support karte hain. Related type-building tools jo paas mein milenge: struct in C, typedef, aur woh jagah jahan enums sabse zyada shine karte hain — switch statement.