c - Why won't extern link to a static variable? -


क्यों extern int n संकलित नहीं होता है जब n को घोषित किया जाता है (एक अलग फ़ाइल में) स्थिर इंट एन , लेकिन घोषित किए जाने पर काम करता है int n ? (इन घोषणाओं में से दोनों फ़ाइल दायरे में थे।)

असल में, फ़ाइल स्कोप में int n ऐसा क्यों नहीं है static int n में वही गुंजाइश? क्या यह केवल extern के संबंध में है? यदि हां, तो मुझे क्या याद आ रहा है?

स्थिर < / कोड> यह घोषित करना है कि एक वेरिएबल स्रोत फ़ाइल में निजी है जिसे इसे घोषित किया गया है

यह ध्यान रखें कि फ़ाइल-स्कोप चर परिभाषा के चार प्रकार हैं:

  1. पूर्णांक blah = 0; - blah इस फ़ाइल में परिभाषित किया गया है और अन्य फ़ाइलों से सुलभ है अन्य फ़ाइलों में परिभाषाएं डुप्लिकेट हैं और त्रुटियों को जन्म देगी।
  2. extern int blah; - blah को कहीं और परिभाषित किया जाना चाहिए और इस फ़ाइल से संदर्भित है।
  3. int blah; - यह फोरट्रान सामान्य के नैतिक बराबर है आप इनमें से किसी भी फाइल में रख सकते हैं, और वे सभी लिंकर द्वारा एक साझा किए गए int पर हल कर सकते हैं (*)
  4. स्थिर इंट ब्ला; (वैकल्पिक रूप से प्रारंभकर्ता के साथ) - यह स्थिर है यह पूरी तरह से इस फाइल के लिए निजी है यह अन्य फाइलों में एक्सटेन्स के लिए दृश्यमान नहीं है, और आपके पास कई अलग-अलग फाइल हो सकती हैं, जो सभी स्थिर प्रकार के ब्लाह; घोषित करते हैं, और ये सभी अलग हैं।
  5. < / Ol>

    दर्शकों में शुद्धियों के लिए: 'फ़ाइल' = संकलन इकाई

    ध्यान दें कि स्थैतिक फ़ंक्शंस (फ़ाइल गुंजाइश में नहीं) को और अधिक कसकर स्कॉच किया गया है : यदि दो फ़ंक्शंस घोषित कर देते हैं, तो भी एक ही फाइल में, वे असंबंधित हैं।

    (*): उन परिचितों के लिए जो आप परिचित नहीं हैं: सामान्य पैटर्न में , एक संकलन इकाई को एक वैश्विक चर परिभाषित करना पड़ता है, और अन्य इसे संदर्भित कर सकते हैं। उस संकलन इकाई में यह 'रहता है' मामले में (3), ऊपर, कोई फ़ाइल नहीं (या सभी फाइलें) इसे परिभाषित करता है यदि दो फाइलें int blah = 0; कहते हैं, तो लिंकर कई परिभाषाओं की शिकायत करेगा यदि दो फाइलें int blah; कहते हैं तो जयशंकर एक एकल वैश्विक int बनाता है और सभी कोड को इसका संदर्भ देता है।


Comments