खोज…


वाक्य - विन्यास

  • (प्रकार) {इनिशियल-लिस्ट}

टिप्पणियों

C मानक C11-§6.5.2.5 / 3 में कहता है:

एक पोस्टफ़िक्स अभिव्यक्ति है कि initializers की एक ब्रेस संलग्न सूची के बाद एक parenthesized प्रकार नाम के होते हैं एक यौगिक शाब्दिक है। यह एक अनाम वस्तु प्रदान करता है जिसका मूल्य इनिशियलाइज़र सूची द्वारा दिया गया है। 99)

और फुटनोट 99 कहते हैं:

ध्यान दें कि यह एक कास्ट एक्सप्रेशन से अलग है। उदाहरण के लिए, एक कलाकार केवल स्केलर प्रकार या शून्य में रूपांतरण निर्दिष्ट करता है, और एक कास्ट एक्सप्रेशन का परिणाम नहीं है।

ध्यान दें कि:

स्ट्रिंग-शाब्दिक और कम्पाउंड-योग्य प्रकार के साथ मिश्रित शाब्दिक, अलग-अलग वस्तुओं को नामित करने की आवश्यकता नहीं है। 101)

101) यह कार्यान्वयन को स्ट्रिंग शाब्दिक और निरंतर यौगिक शाब्दिक के लिए भंडारण को एक ही या अतिव्यापी प्रतिनिधित्व के साथ साझा करने की अनुमति देता है।

उदाहरण मानक में दिया गया है:
C11-§6.5.2.5 / 13:

स्ट्रिंग शाब्दिकों की तरह, कांस्टेबल-योग्य यौगिक शाब्दिकों को केवल-पढ़ने के लिए स्मृति में रखा जा सकता है और साझा भी किया जा सकता है। उदाहरण के लिए,

(const char []){"abc"} == "abc"

शाब्दिक भंडारण साझा किया जाता है, तो 1 उपज सकता है।

यौगिक साहित्य की परिभाषा / आरंभ

एक यौगिक शाब्दिक एक अनाम वस्तु है जो उस क्षेत्र में बनाई गई है जहां परिभाषित किया गया है। अवधारणा को पहली बार C99 मानक में पेश किया गया था। यौगिक शाब्दिक के लिए एक उदाहरण है

C मानक से उदाहरण, C11-§6.5.2.5 / 9:

int *p = (int [2]){ 2, 4 };

p को दो ints के अनाम सरणी के पहले तत्व के पते पर आरंभीकृत किया गया है।

यौगिक शाब्दिक एक अंतराल है। अनाम ऑब्जेक्ट की संग्रहण अवधि या तो स्थिर है (यदि शाब्दिक फ़ाइल स्कोप पर दिखाई देता है) या स्वचालित (यदि शाब्दिक ब्लॉक स्कोप पर प्रकट होता है), और बाद वाले मामले में ऑब्जेक्ट का जीवनकाल समाप्त हो जाता है जब नियंत्रण संलग्नक को छोड़ देता है।

void f(void)
{
    int *p;
    /*...*/
    p = (int [2]){ *p };
    /*...*/
}

p को दो ints के एक सरणी के पहले तत्व का पता सौंपा गया है, पहला मूल्य जो पहले p द्वारा इंगित किया गया है और दूसरा, शून्य है। [...]

यहाँ p ब्लॉक के अंत तक वैध रहता है।

डिजाइनर्स के साथ कंपाउंड शाब्दिक

(C11 से भी)

  struct point {
    unsigned x;
    unsigned y;
  };

  extern void drawline(struct point, struct point);

 // used somewhere like this
 drawline((struct point){.x=1, .y=1}, (struct point){.x=3, .y=4});

एक काल्पनिक फ़ंक्शन drawline , टाइप struct point दो तर्क प्राप्त करता है। पहले में x == 1 और y == 1 का समन्वय है, जबकि दूसरे में x == 3 और y == 4

सरणी लंबाई निर्दिष्ट किए बिना यौगिक शाब्दिक

int *p = (int []){ 1, 2, 3};  

इस मामले में सरणी का आकार निर्दिष्ट नहीं है, फिर इसे इनिशियलाइज़र की लंबाई से निर्धारित किया जाएगा।

कंपाउंड के आकार की तुलना में कम शुरुआती की लंबाई वाले कंपाउंड शाब्दिक हैं

int *p = (int [10]){1, 2, 3}; 

यौगिक शाब्दिक के बाकी तत्वों को प्रारंभिक रूप से 0 किया जाएगा।

पढ़ें- केवल यौगिक शाब्दिक

ध्यान दें कि एक यौगिक शाब्दिक एक अंतराल है और इसलिए यह तत्व संशोधित हो सकते हैं। एक केवल-पढ़ने के लिए यौगिक शाब्दिक रूप से const क्वालिफायर (const int[]){1,2} का उपयोग करके निर्दिष्ट किया जा सकता है।

यौगिक शाब्दिक जिसमें मनमाना भाव हो

एक फ़ंक्शन के अंदर, एक यौगिक शाब्दिक, जैसा कि C99 के बाद से किसी भी आरंभीकरण के लिए, मनमाना अभिव्यक्ति हो सकता है।

void foo()
{
    int *p;
    int i = 2; j = 5;
    /*...*/
    p = (int [2]){ i+j, i*j };
    /*...*/
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow