2011-04-08 6 views
16

मैंने इस तरह के कुछ कोड का उपयोग किया:सी में एक फंक्शन मानक के अंदर `typedef` और` struct` हैं?

void A() 
{ 
    typedef struct B B; 
    struct B 
    { 

    }; 

    B b; 
}; 

typedef और struct परिभाषा किसी फ़ंक्शन के अंदर। यह क्लैंग के साथ संकलित है, लेकिन मैं जानना चाहता हूं (1) चाहे वे मानक का हिस्सा हों या नहीं। और लगभग (2) क्या वे केवल कार्यक्षेत्र में पहचाने जाने के लिए सीमित हैं।

उत्तर

23

हाँ, मानक यह अनुमति देता है, और हाँ, नाम आप इस तरह से बनाने के समारोह (यानी, वह स्थानीय गुंजाइश, जब आपको int i; परिभाषित चाहते है, i स्थानीय गुंजाइश है) के अंदर ही दिख रहा है।

यह और अधिक आम है, लेकिन यह कुछ इस तरह करना है:

typedef struct { 
    /* ... */ 
} B; 
B b; 
+16

नीचे की तरह अपने समारोह के अंदर कुछ आपरेशन कर के बाद की घोषणा नहीं कर सकते हैं या; ':) – Mac

2

हाँ, यह अनुमति दी है। लेकिन आपके पास
फ़ंक्शन के अंदर फ़ंक्शन नहीं हो सकता है।

घोषणाएं पहले और बाद में आपके वास्तविक कोड के साथ की जानी चाहिए।

यदि आप वास्तव में केवल एक बार इसका इस्तेमाल करने, `struct {/ * ... * /} ख जा रहे हैं आप, आप

void A() 
{ 

int a=0; 

a++;  

typedef struct B B;//this is wrong 
    struct B 
    { 

    }; 

    B b; 
}; 
+4

सी 8 9 की आवश्यकता है कि घोषणाओं/परिभाषाएं अन्य बयानों से पहले हों, लेकिन सी 99 नहीं है। –

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