क्या अलग-अलग क्षेत्रों के साथ एक सी फ़ाइल में एक ही नाम के एकाधिक स्थिर चर घोषित करना संभव है? मैंने इसे जांचने के लिए एक सरल कार्यक्रम लिखा और जीसीसी में इसे संकलित और ठीक काम किया।क्या एक ही सी फ़ाइल में एक ही नाम के साथ एकाधिक स्थैतिक चर घोषित करना संभव है?
कोड:
static int sVar = 44;
void myPrint2()
{
printf("sVar = %d\n", sVar++);
}
void myPrint()
{
static int sVar =88;
printf("sVar = %d\n", sVar++);
}
int main(void)
{
static int sVar = 55;
int i = 0;
for (i = 0; i < 5; i++)
myPrint();
printf("sVar = %d\n", sVar);
myPrint2();
return(0);
}
अब मेरे सवाल है के बाद से सभी "स्थिर" चर एक ही अनुभाग (.data) में निवास करेंगे तो हम एक खंड में एक ही नाम के साथ कई चर हो सकता है कैसे?
मैं अलग अनुभाग की जांच करने के लिए objdump
का इस्तेमाल किया और पाया कि सभी स्थैतिक चर (sVar
) .data खंड में लेकिन विभिन्न नामों वाली इस प्रकार थे:
0804960c l O .data 00000004 sVar
08049610 l O .data 00000004 sVar.1785
08049614 l O .data 00000004 sVar.1792
क्यों कम्पाइलर वेरिएबल के नाम बदल रहा है है (चूंकि सी नाम उलझन का समर्थन नहीं करता है)?
वे केवल अस्थायी, आंतरिक नाम हैं। सी ++ में नाम उलझन डीएलएल निर्यात जैसी चीजों पर लागू होता है। यह एक अलग बात है। – Puppy
सी नाम उलझन की अनुमति देता है, और आपने इसे अभी दिखाया है। – MSalters
नाम मैंगलिंग एक कार्यान्वयन विस्तार है। सी इस तरह "अनुमति" नहीं देता है, यह एक सुविधा को लागू करने के लिए इसका उपयोग करता है (जाहिर है - मुझे नहीं पता था कि आप यह कर सकते हैं, लेकिन आप हर दिन कुछ नया सीखते हैं)। इसी प्रकार सी ++ नाम मैंगलिंग को "अनुमति" नहीं देता है, यह फ़ंक्शन ओवरलोडिंग को लागू करने के लिए इसका उपयोग करता है। – JeremyP