Unions और Enumerations
दो उपयोगी उपकरण: union और enum
यह lesson दो छोटे पर उपयोगी C features बताता है: union, जो कई members को एक memory space साझा करने देता है, और enum, जो numbers को पढ़ने योग्य नाम देता है। दोनों काम करते देखते ही सरल लगते हैं।
Union क्या है?
Union structure जैसा दिखता है, पर एक बड़े अंतर के साथ: इसके सभी members वही memory साझा करते हैं। एक समय में केवल एक member के पास असली value होती है — एक में लिखना दूसरों को मिटा देता है।
#include <stdio.h>
union Value {
int i;
float f;
};
int main() {
union Value v;
v.i = 10;
printf("i = %d\n", v.i);
v.f = 3.14; // wahi memory overwrite karta hai
printf("f = %.2f\n", v.f);
return 0;
}i = 10
f = 3.14
Union memory कैसे साझा करता है
चूँकि members overlap करते हैं, union केवल अपने सबसे बड़े member जितना बड़ा होता है — योग जितना नहीं।
union Value { int i; double d; char c; };
printf("%lu\n", sizeof(union Value)); // sabse bade (double) ka size8
Union 8 bytes लेता है — double का size — भले उसके तीन members हों, क्योंकि सभी एक ही जगह रहते हैं।
Unions कब उपयोगी हैं
- ऐसी value रखना जो कई types में से एक हो सकती है, पर एक समय में एक।
- तंग, embedded या low-level programs में memory बचाना।
- वही bytes दो तरह से समझना (advanced, low-level उपयोग)।
Structure अपने सभी members एक साथ रखता है; union एक समय में एक। पूरी तुलना के लिए देखें C में structure vs union।
Enumerations (enum)
enum संबंधित integer constants की सूची को नाम देता है, तो आपका code numbers के बजाय शब्दों जैसा पढ़ा जाता है।
#include <stdio.h>
enum Day { MON, TUE, WED, THU, FRI }; // 0,1,2,3,4
int main() {
enum Day today = WED;
printf("Day number: %d\n", today); // 2
if (today == WED) printf("Midweek!\n");
return 0;
}Day number: 2
Midweek!
Default रूप से पहला नाम 0 है और हर अगला एक ज़्यादा। आप values स्पष्ट रूप से भी दे सकते हैं: enum Status { OK = 1, FAIL = 5 };।
enum सादे numbers से बेहतर क्यों
| enum के बिना | enum के साथ |
|---|---|
if (state == 2) | if (state == PAUSED) |
| 2 का क्या मतलब? | सादी अंग्रेज़ी जैसा पढ़ा जाता है |
| Numbers मिलाना आसान | Compiler values देता है |
आम गलतियाँ
- Union का वह member पढ़ना जो आपने आख़िरी में नहीं लिखा — garbage मिलता है।
- Union से सभी members एक साथ रखने की उम्मीद करना (वह structure है)।
- यह मानना कि enum values हमेशा 1 से शुरू होती हैं — वे default रूप से 0 से शुरू होती हैं।
- यह भूलना कि enum दरअसल भीतर बस एक
intहै।
एक union बनाएँ जो या तो int या char रखे, और उसका sizeof print करें। फिर enum Color { RED, GREEN, BLUE } define करें और GREEN का number print करें।
सारांश
- Union के members एक memory space साझा करते हैं; एक समय में एक valid होता है।
- Union का size उसके सबसे बड़े member जितना होता है।
- Unions तब इस्तेमाल करें जब value कई types में से एक हो, एक समय में एक।
enuminteger constants को पढ़ने योग्य नाम देता है, 0 से शुरू।- enum code को सादे numbers से साफ़ बनाता है; पूरे struct/union तुलना के लिए structure vs union देखें।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
C में union क्या है?
Union और structure में क्या अंतर है?
C में enum क्या है?
enum (enumeration) एक type है जो integer constants के समूह को अनुकूल नाम देता है, जैसे enum Day { MON, TUE, WED };। Default रूप से नाम 0 से शुरू होकर एक-एक बढ़ते हैं, तो MON 0 है, TUE 1, और ऐसे ही, जो code को सादे numbers से कहीं ज़्यादा पढ़ने योग्य बनाता है।Numbers के बजाय enum क्यों इस्तेमाल करें?
if (day == SUNDAY) लिखना if (day == 0) से कहीं स्पष्ट है। यह संबंधित constants को एक type के अंतर्गत समूहित करता है और compiler को values देने देता है, गलतियाँ कम करते और बाद में बदलना आसान बनाते हुए।Union कितनी memory इस्तेमाल करता है?
int और double वाला union double जितनी जगह लेता है, क्योंकि दोनों में वही बड़ा है।