प्रश्न का उत्तर देने के लिए, "क्या स्थैतिक का अर्थ केवल वैल की एक प्रति है, यदि हेडर को एक से अधिक स्रोतों द्वारा शामिल किया जाता है? ... ...
सं । वैल को हमेशा हर फ़ाइल में अलग से परिभाषित किया जाएगा जिसमें हेडर शामिल है।
C और C ++ के मानक इस मामले में अंतर पैदा करते हैं।
C में, फ़ाइल-स्कूप किए गए चर डिफ़ॉल्ट रूप से बाहरी हैं। यदि आप C का उपयोग कर रहे हैं, तो VAL स्थिर है और ANOTHER_VAL बाहरी है।
ध्यान दें कि आधुनिक लिंकर ANOTHER_VAL के बारे में शिकायत कर सकते हैं यदि हेडर को अलग-अलग फाइलों में शामिल किया जाता है (एक ही वैश्विक नाम दो बार परिभाषित किया गया है), और निश्चित रूप से शिकायत करेगा अगर ANOTHER_VAL किसी अन्य फ़ाइल में एक अलग मूल्य के लिए प्रारंभ किया गया था
C ++ में, फ़ाइल-स्कोप किए गए चर डिफ़ॉल्ट रूप से स्थिर होते हैं यदि वे स्थिर होते हैं, और डिफ़ॉल्ट रूप से बाहरी होते हैं यदि वे नहीं हैं। यदि आप C ++ का उपयोग कर रहे हैं, तो VAL और ANOTHER_VAL दोनों स्थिर हैं।
आपको इस तथ्य पर भी ध्यान देने की आवश्यकता है कि दोनों चर निर्धारित नक्षत्र हैं। आदर्श रूप से संकलक हमेशा इन चरों को इनलाइन करना चुनता है और उनके लिए कोई भंडारण शामिल नहीं करता है। भंडारण का आवंटन क्यों किया जा सकता है इसके कारणों की एक पूरी मेजबानी है। मैं सोच सकता हूँ ...
- डिबग विकल्प
- फ़ाइल में लिया गया पता
- संकलक हमेशा भंडारण आवंटित करता है (जटिल कास्ट प्रकार आसानी से इनलेट नहीं किया जा सकता है, इसलिए बुनियादी प्रकारों के लिए एक विशेष मामला बन जाता है)