static
का पूरा और पूरा उद्देश्य यह घोषित करना है कि एक चर स्रोत फ़ाइल के लिए निजी है जिसे इसे में घोषित किया गया है। इस प्रकार, यह एक बाहरी से कनेक्शन को रोकने में ठीक से अपना काम कर रहा है।
ध्यान रखें फ़ाइल गुंजाइश चर परिभाषा के चार जायके देखते हैं कि:
int blah = 0;
- blah इस फाइल में परिभाषित और अन्य फ़ाइलों से पहुँचा जा सकता है। अन्य फाइलों में परिभाषाएं डुप्लीकेट हैं और त्रुटियों का कारण बनती हैं।
extern int blah;
- ब्लाह को कहीं और परिभाषित किया जाना चाहिए और इस फ़ाइल से संदर्भित किया जाना चाहिए।
int blah;
- यह FORTRAN COMMON
का नैतिक समकक्ष है। आपके पास इनमें से किसी भी फाइल में हो सकता है, और वे सभी लिंकर द्वारा एक साझा int
पर हल किए गए हैं। (*)
static int blah;
(वैकल्पिक रूप से प्रारंभकर्ता के साथ) - यह स्थिर है। यह इस फ़ाइल के लिए पूरी तरह से निजी है। यह अन्य फ़ाइलों में बाहरीों के लिए दृश्यमान नहीं है, और आपके पास कई अलग-अलग फाइलें हो सकती हैं जो सभी static TYPE blah;
घोषित करती हैं, और वे सभी अलग-अलग हैं।
दर्शकों में शुद्धवादियों के लिए: 'फ़ाइल' = संकलन इकाई।
ध्यान दें कि स्थिर अंदरूनी फ़ंक्शंस (फ़ाइल स्कोप पर नहीं) भी अधिक कसकर स्कॉप्ड हैं: यदि दो फ़ंक्शन static int bleh = 0;
को उसी फ़ाइल में घोषित करते हैं, तो वे असंबद्ध हैं।
(*): आप में से उन लोगों के लिए परिचित नहीं हैं: सामान्य पैटर्न में, एक संकलन इकाई को वैश्विक चर परिभाषित करना होता है, और अन्य इसका संदर्भ दे सकते हैं। यह संकलन इकाई में 'रहता है'। यदि (3), ऊपर, कोई फ़ाइल (या सभी फाइलें) इसे परिभाषित नहीं करती हैं। यदि दो फाइलें int blah = 0;
कहती हैं, तो लिंकर कई परिभाषाओं की शिकायत करेगा। यदि दो फाइलें int blah;
कहती हैं तो लिंकर खुशी से एक वैश्विक int
बनाता है और सभी कोड इसका संदर्भ लेता है।
स्टोरेज विनिर्देशकों के संदर्भ में, 'int n' को किस प्रकार (फ़ाइल स्कोप में) कहा जाएगा? –
@bmargulies: फ़ाइल दायरे पर, आपका मतलब है? क्योंकि फ़ंक्शन स्कोप पर, एक स्थैतिक var वह होता है जो फ़ंक्शन रिटर्न के बाद अपना मान बरकरार रखता है, और कक्षा के दायरे में, एक स्थिर सदस्य के पास सभी ऑब्जेक्ट्स के लिए एक एकल उदाहरण उपलब्ध होता है। – mingos
संपादन द्वारा स्पष्ट, मुझे भरोसा है। – bmargulies