बेनामी structs/यूनियन सी मानक का हिस्सा नहीं है, बल्कि एक बहुत व्यापक जीएनयू एक्सटेंशन नहीं है।
आपके विशेष उदाहरण में कुछ कंपाइलर्स (मुख्य रूप से जीसीसी) आपको प्रबंधक और कार्यकर्ता को अद्वितीय चर के माध्यम से एक्सेस करने की अनुमति देगा। company[i].shares
या company[i].department
, लेकिन company[i].age
अस्पष्ट है और संकलक को पता नहीं चलेगा कि कौन सा मतलब है। आपका दृष्टिकोण है जो भी वैध सी
नहीं है वहाँ इस को हल करने के लिए दो तरीके हैं
union {
int num;
float num;
} union_number;
को परिभाषित करने की कोशिश कर के समान है।
क) struct (बुराई जीएनयू तरह से बाहर साझा किया विशेषताओं चलती, ऐसा नहीं करते कृपया, मैं एक तथ्य यह है कि आईसीसी भी इस संकलन नहीं है)
union employee
{
char key;
struct person {
short int age;
union {
struct manager
{
float shares;
short int level;
};
struct worker
{
short int skill;
short int department;
};
}
};
} company[10];
ख के लिए जानते हैं) या अधिक स्वच्छ मानकीकृत तरीका है अपने structs नाम के लिए:
union employee
{
char key;
struct manager
{
short int age;
float shares;
short int level;
} manager;
struct worker
{
short int age;
short int skill;
short int department;
} worker;
} company[10];
इस मामले में आप company[i].manager.age
, company[i].worker.skill
और इतने पर के माध्यम से struct तत्वों उपयोग करने में सक्षम हो जाएगा।
कृपया ध्यान दें कि रनटाइम पर यह जांचने का कोई तरीका नहीं है कि आपके संघ में एक कुंजी, प्रबंधक या कार्यकर्ता है या नहीं। इसे पहले से ही जाना जाना चाहिए।
एक और बात: मुझे यकीन नहीं है कि यह इरादा है, लेकिन आपकी घोषणा में आप प्रबंधक या कार्यकर्ता के साथ एक कुंजी को सहेज नहीं सकते हैं। आपके यूनियन में केवल एक कुंजी, प्रबंधक या कार्यकर्ता
स्रोत
2012-09-29 17:51:50
+1 'यूनियन' कुंजी के उपयोग के बारे में अवलोकन उत्कृष्ट है! आप यह उल्लेख करना चाह सकते हैं कि 'कार्यकर्ता' को 'कार्यकर्ता' और 'प्रबंधक 'के अंदर' प्रबंधक 'को देना आवश्यक नहीं है। – dasblinkenlight
आह, अब मुझे एहसास हुआ कि मैंने वहां क्या किया ... मैं पूरी तरह से संघ का उपयोग करने के बिंदु से चूक गया। – amiregelz