2009-04-18 18 views
5

किसी को भी नामित initializers के बारे में निम्न पंक्ति कृपया समझा सकता है:मनोनीत initializers और छोड़े गए तत्वों

प्रारंभकर्ता सूची तत्वों है कि कुल में कहीं भी घोषित किया गया है छोड़ सकते हैं, न कि केवल अंत में की तुलना में।

उत्तर

2

यह link आज़माएं।

विचार प्रारंभिक समय के दौरान संरचना जैसे जटिल प्रकार के सदस्यों को संदर्भित करने में सक्षम होना है। जैसे

struct s { 
    int a, b; 
}; 

int main() { 
    struct s = { .b = 42, .a = -42 }; 
    return 0; 
} 

मूल्य निर्दिष्ट करते समय लचीलापन स्वतंत्र होने से प्राप्त किया जाता है। याद रखें कि इसे सी 99 मानक में जोड़ा गया था और इसे कंपेलरों द्वारा समर्थित नहीं किया जा सकता है जो पूरी तरह से सी 99 का समर्थन नहीं करते हैं (या मानक के पहले संस्करण का समर्थन करते हैं)।

8

आप एक पारंपरिक initialiser सूची का उपयोग करते हैं, तत्वों के लिए मूल्यों क्रम में आवंटित कर रहे हैं, इसलिए यदि आप इस struct है:

foo_t value = { 7 }; 
:

typedef struct _foo { 
    int a; 
    int b; 
} foo_t; 

तो यह initialiser स्पष्ट a और नहीं b प्रदान करती है

नामित प्रारंभिक खिलाड़ियों के बिना, छोड़े जा सकने वाले एकमात्र तत्व

यूएसआई पर घोषित किए गए हैं struct में पहली मूल्य होने के बावजूद,

foo_t value = { .b = 8 }; 

तो value.a के लिए initialiser छोड़ दिया जाता है: एनजी नामित initialisers, आप तत्वों है कि कहीं भी घोषित किया गया है मिटा सकते हैं।

संबंधित मुद्दे