**अनाम (नामहीन) यूनियन/स्ट्रक्चर** के पास टैग नाम नहीं होता। इनके मेम्बर्स पैरेंट स्कोप में सीधे एक्सेसिबल होते हैं।
सिंटैक्स
struct {
int x, y; // अनाम स्ट्रक्चर
};
union {
int i;
float f; // अनाम यूनियन
};
उदाहरण: नेस्टेड अनाम स्ट्रक्चर
#include <stdio.h>
struct Point {
// अनाम स्ट्रक्चर
struct {
int x;
int y;
};
};
int main() {
struct Point pt;
pt.x = 10; // सीधा एक्सेस - pt.inner.x नहीं
pt.y = 20;
printf("Point (%d, %d)\n", pt.x, pt.y);
return 0;
}
आउटपुट
Point (10, 20)
अनाम यूनियन उदाहरण
#include <stdio.h>
struct Value {
int type; // 0=int, 1=float
union { // अनाम यूनियन
int i;
float f;
};
};
void print_val(struct Value v) {
if (v.type == 0)
printf("Int: %d\n", v.i);
else
printf("Float: %f\n", v.f);
}
int main() {
struct Value v1 = {0, .i = 42};
struct Value v2 = {1, .f = 3.14f};
print_val(v1);
print_val(v2);
return 0;
}
नियम और सीमाएं
- अनाम स्ट्रक्चर/यूनियन के मेम्बर नाम **पैरेंट में यूनिक** होने चाहिए।
- नेस्टेड अनाम स्ट्रक्चर/यूनियन अनुमत हैं।
- C11 मानक से आधिकारिक रूप से समर्थित (GCC एक्सटेंशन के रूप में पहले से उपलब्ध)।
- C++ में अनाम यूनियन समर्थित हैं, अनाम स्ट्रक्चर नहीं (कुछ कंपाइलर्स एक्सटेंशन के रूप में सपोर्ट करते हैं)।