Here और Here मैंने पाया कि ब्लॉक में चर बनाई गई हैं जब निष्पादन कि ब्लॉक में पहुँचता है,ब्लॉक के अंदर परिवर्तनीय जीवनकाल क्या है?
साबित करने के लिए कि मैं करने की कोशिश की इस:
int main()
{
{
char a;
printf("Address of a %d \n",&a);
}
char b;
printf("Address of b %d \n",&b);
}
जैसी उम्मीद थी ख पहले बनाया गया था (क्योंकि बाहरी खंड है आंतरिक से जल्दी निष्पादित), और जब निष्पादन आंतरिक ब्लॉक पर पहुंचा तो बनाया गया था। ऊपर दिए गए कोड का आउटपुट:
Address of a 2686766
Address of b 2686767
(86 पर परीक्षण किया गया (ढेर नीचे की ओर बढ़ता है, इसलिए अधिक से अधिक पते के साथ चर पहले बनाया गया था))।
लेकिन क्या इस एक के बारे में ?:
int main()
{
{
char a;
printf("Address of a %d \n",&a);
} // I expected that variable a should be destroyed here
{
char b;
printf("Address of b %d \n",&b);
}
}
आउटपुट:
Address of a 2686767
Address of b 2686766
मैं उम्मीद है कि एक पहले खंड बयान की ब्रेस बंद करने पर नष्ट हो गया था, इसलिए संबोधित जहां एक स्थित था अब ढेर के शीर्ष पर है, और बी यहां बनाया जाना चाहिए, इस प्रकार दोनों पते के ऊपर आउटपुट बराबर होना चाहिए, लेकिन वे नहीं हैं? क्या ब्लॉक के अंत में चर नष्ट हो गए हैं? यदि नहीं, क्यों?
'char *' से 'printf ("% d ") पास करने के लिए अनिर्धारित व्यवहार'। साथ ही, स्वचालित संग्रहण अवधि के साथ अलग-अलग ऑब्जेक्ट्स के सापेक्ष पते निर्दिष्ट नहीं हैं। यह शायद कंपाइलर अनुकूलन सेटिंग्स पर भी निर्भर करता है। – EOF
'printf' में एक सूचक मुद्रित करने के लिए'% p' का उपयोग करें। – Chiel
आपने अपना कोड कैसे संकलित किया? क्या आपने अनुकूलन सक्षम किया? –