2012-05-20 9 views
6

वैश्विक स्तर पर एक वर्ण सरणी परिभाषित की गई है और एक ही नाम वाली संरचना को फ़ंक्शन के भीतर परिभाषित किया गया है। क्यों आकार का ऑपरेटर सी & सी ++ के लिए अलग-अलग मान देता है?आकार का ऑपरेटर सी और सी ++ के लिए अलग-अलग मान देता है?

char S[13]; 
void fun() 
{ 
    struct S 
    { 
     int v; 
    }; 
    int v1 = sizeof(S); 
} 

// रिटर्न 4 C++ और 13 सी

+0

@OliCharlesworth: मेरे संकलक – Ashwyn

+0

@Ashwyn पर ठीक संकलित - अपने संकलक संकलित 'बिना,' 'के बाद struct S' ' की घोषणा? – birryree

+0

@ ओली चेहरल्सवर्थ: ओह क्षमा करें! लिखने के लिए भूल गए, वास्तव में मैंने चिपकाने की बजाय, उस कोड को लिखा था! – Ashwyn

उत्तर

15

क्योंकि सी ++ में, struct जबकि सी में, यह struct S नामक (जो कारण है कि आप अक्सर typedef struct सी कोड में इस्तेमाल किया देखें) आप, S नाम पर है परिभाषित किया। आप निम्न के कोड बदलने के लिए थे, तो आप उम्मीद जायेगा परिणाम:

char S[13]; 
void fun() 
{ 
    typedef struct tagS 
    { 
     int v; 
    } S; 
    int v1 = sizeof(S); 
} 
+1

अंडरस्कोर से शुरू होने वाले नामों का उपयोग अपरकेस अक्षर के बाद करना एक बुरा विचार है, क्योंकि कार्यान्वयन के लिए उन नाम [आरक्षित] (http://stackoverflow.com/questions/228783/) हैं। – fredoverflow

+0

पर्याप्त मेला। थोड़ा संशोधित (यह नहीं कि उदाहरण के लिए यह बहुत कुछ मायने रखता है।) –

10

सी में, struct प्रकार का उल्लेख करने के लिए, आप struct S कहने के लिए की जरूरत है। इसलिए, sizeof(S) सरणी को संदर्भित करता है।

सी ++ में, struct अनावश्यक है। तो स्थानीय S वैश्विक S छुपाता है।

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