Visual walkthrough — Enumerations
5.1.25 · D2· Coding › C Programming › Enumerations
Ye parent topic ko dheere dheere todke dekhna hai. Yahan har symbol ko use karne se pehle earn kiya gaya hai. Agar tumne kabhi enum nahi dekha, line one se shuru karo — kuch bhi assumed nahi hai.
Step 1 — Ek naam asal mein sirf ek locker number hai
KYA HAI. Hum teen khaali lockers lagate hain aur har ek par ek paper name-tag chipkate hain: RED, GREEN, BLUE. Machine tags nahi padhti; woh sirf locker numbers padhti hai. Hamara poora kaam yeh karna hai ki har naam ke peeche kaunsa number chupta hai woh pata karo.
KYUN. Kisi bhi rule se pehle, tumhe core secret par yakeen karna hoga: C mein ek enumerator koi special object nahi hai — woh literally ek integer hai jo naam-tag pehne hua hai. Yahi woh foundation hai jise parent note "lockers par sticky notes" kehta hai. Baaki sab kuch bookkeeping hai is baare mein ki kaunsa number kis tag par aata hai.
PICTURE. Teen grey lockers, har ek par ek blue naam-tag. Locker ke andar ka number wahi hai jo hum dhundh rahe hain.

Step 2 — Pehle tag ko hamesha 0 milta hai
KYA HAI. Hum sabse pehla locker fill karte hain. C ka rule: woh pehla enumerator jiske saath koi number nahi likha woh value paata hai.
- — list mein 0th (pehla) enumerator. Hum 0 se count karte hain kyunki C 0 se count karta hai.
- — iska chupta integer.
- — starting value, language ne choose kiya taaki baad mein array indices ke saath seedha line up ho jaye.
0 kyun, 1 kyun nahi? Kyunki C arrays index 0 se start hoti hain (dekho Arrays in C). Agar enums bhi 0 se start hon, toh ek enumerator ko directly array position ke roop mein "+1" fudge ke bina use kiya ja sakta hai. Yeh design choice is exact number ki wajah hai.
PICTURE. RED locker mein ek bold 0 fill hota hai.

Step 3 — Agla har tag "previous + 1" hota hai
KYA HAI. Pehle wale ke baad har enumerator ke liye jiske saath koi explicit number nahi hai, hum use pichle wale ko lekar aur 1 add karke compute karte hain:
- — position par enumerator (jo hum abhi fill kar rahe hain).
- — likhi gayi list mein iske theek pehle wala enumerator.
- — us neighbour ka number lo aur ek step upar jao.
YEH tool kyun — ek recurrence? Recurrence ek aisa rule hai jo har term ko usse pehle wali term se define karta hai. Hum ise choose karte hain kyunki C standard literally kehta hai "pichle enumerator se ek zyada". Yeh is sawaal ka jawab deta hai ki "agar mujhe sirf 0 aur phrase 'add one' pata ho, kya main poori list generate kar sakta hoon?" — haan: rule ko baar baar apply karo.
Ise {RED, GREEN, BLUE} par apply karna:
PICTURE. Orange "+1" arrows locker-to-locker hop karte hain: 0 → 1 → 2.

Step 4 — Explicit number likhna counter ko teleport karta hai
KYA HAI. Tum kisi bhi tag par = se number pin kar sakte ho. Woh number sirf us tag ke liye "+1" ko override karta hai:
enum Status { OK = 1, WARN = 5, ERR, FATAL = 5 };OK = 1— explicit hai, isliye (teleport 0 ko ignore karta hai).WARN = 5— phir explicit, 5 par teleport.ERR— koi number nahi, toh +1 rule jaag jaata hai: .FATAL = 5— explicit, wapas 5 par teleport.
+1 rule jump ke baad "resume" kyun karta hai? Kyunki Step 3 ka recurrence kabhi nahi kehta "pichle default mein 1 add karo" — woh kehta hai "pichli value mein 1 add karo", chahe woh value jumped ho ya nahi. Toh WARN=5 ke baad, agla default simply hai.
PICTURE. Ek number line. Blue explicit landings (1, 5, 5) teleport arrows ke saath; ek orange "+1" hop ERR = 6 produce karta hai.

Step 5 — Edge case: duplicate values allowed hain
KYA HAI. Step 4 mein, WARN aur FATAL dono 5 hold karte hain. Yeh bilkul legal hai.
YEH legal kyun hona chahiye. Rule sirf kabhi integers produce ya copy karta hai, aur integers freely repeat hote hain. Language sirf do tags ko same naam rakhne se rokti hai — kyunki tags naam se lookup hote hain (dekho Step 7). Do alag naam ek hi number par point kar sakte hain, bilkul waise jaise do log ek hi house number par reh sakte hain.
PICTURE. Do alag tags WARN aur FATAL dono single value 5 ko point karte hain.

Step 6 — Edge case: trailing COUNT sentinel
KYA HAI. Ek bina number wala tag aakhir mein rakho aur woh automatically utna ho jaata hai jitne tags usse pehle aaye hain:
enum { JAN, FEB, MAR, MONTH_COUNT }; // MONTH_COUNT = 3YEH kaam kyun karta hai — recurrence chase karo. JAN=0, FEB=1, MAR=2. Trailing tag sirf "previous + 1" hai. Lekin theek 3 real months the (JAN, FEB, MAR positions 0,1,2 par), toh last value hi count hai. Yeh koi special feature nahi hai — yeh Step 3 ka apne aap nikalna hai. Ek month add karo aur count apne aap update ho jaata hai, isliye yeh ek array ko safely size karta hai.
PICTURE. Teen data lockers 0,1,2 aur ek alag green MONTH_COUNT = 3 poori row ko ruler ki tarah measure karta hai.

Step 7 — Degenerate case: runtime par names gayab ho jaate hain
KYA HAI. Compilation ke baad, tags chale jaate hain. Sirf integers bachte hain. Isliye:
enum Color { RED, GREEN, BLUE };
printf("%d\n", GREEN); // prints 1, NOT "GREEN"KYUN. Step 1 ke naam-tags ek compile-time convenience hain. Compiler har GREEN ko 1 se swap karta hai aur phir tags pher deta hai. Lookup karne ke liye koi name table nahi bachta — kuch languages ke unlike, C koi reverse map nahi rakhta. Names recover karne ke liye tumhe apna strings ka array banana hoga (ek idea jo Integer Types in C se linked hai, kyunki store hone wali cheez ek plain int hai):
const char *names[] = { "RED", "GREEN", "BLUE" };
printf("%s\n", names[GREEN]); // ab "GREEN" print karta haiPICTURE. Left: compile time, tags visible. Right: runtime, tags peeled off, sirf bare integers 0 1 2 bachte hain.

Ek-picture summary
Upar sab kuch ek hi machine hai: 0 se seed karo, +1 se chalo, = par teleport karo, runtime par names mar jaate hain.

Recall Feynman: poora walkthrough apne words mein batao
Ek row of lockers imagine karo. Pehla wala, agar tum kuch nahi kehte, 0 number paata hai. Uske baad har locker apne left neighbour ka number copy karta hai aur 1 add karta hai — yahi poora counting rule hai. Agar tum = se kisi locker par number likhte ho, woh us number par jump karta hai, aur agla bina-number wala locker simply wahan se 1 add karta rehta hai (toh 5 se 6 ho jaata hai). Do lockers ek number share kar sakte hain; sirf paper name-tags alag hone chahiye, kyunki compiler unhe isi se dhundta hai. Ek clever trick: aakhir mein rakha ek bina-number wala tag apne aap utna ho jaata hai jitne lockers pehle aaye, toh woh unhe count karta hai. Aur bada secret: jab program actually run hota hai, saare paper tags peel off hokar phenk diye jaate hain — machine sirf numbers dekhti hai, isliye GREEN print karne par 1 aata hai, woh word nahi.
Connections
- Enumerations — woh parent topic jise yeh walkthrough derive karta hai.
- Integer Types in C — enumerator ki hidden value ek plain
inthai. - switch statement — jahan yeh derived values naam se match hoti hain.
- Arrays in C — Step 6 ka
COUNTsentinel arrays ko size karta hai. - struct in C — data group karta hai; enums iske bajaye values ko naam dete hain.
- typedef —
typedef enum {...} Color;enumkeyword hata deta hai.