2010-07-19 10 views
15

वैश्विक चर का डिफ़ॉल्ट संग्रहण वर्ग क्या है?वैश्विक चर के लिए डिफ़ॉल्ट भंडारण वर्ग क्या है?

वेब पर खोज करते समय मैंने पाया, कुछ साइटें कहती हैं कि यह static है। लेकिन, स्थैतिक मतलब आंतरिक संबंध और चर फ़ाइल फ़ाइल के बाहर उपलब्ध नहीं हो सकता है यानी यह अन्य ऑब्जेक्ट फ़ाइलों के लिए उपलब्ध नहीं होना चाहिए। लेकिन, उन्हें अभी भी extern int i जैसी घोषणाओं का उपयोग करके अन्य फ़ाइलों तक पहुंचा जा सकता है।

और, यदि मैं वैश्विक चर में static स्पष्ट रूप से उल्लेख करता हूं तो यह फ़ाइल स्कोप के बाहर उपलब्ध नहीं है।

फिर, वैश्विक चर के लिए सही डिफ़ॉल्ट संग्रहण कक्षा क्या है?

उत्तर

15

डिफ़ॉल्ट संग्रहण अवधि स्थिर है, लेकिन डिफ़ॉल्ट लिंकेज बाहरी है। आप थोड़ा उलझन में खोजने के लिए अकेले नहीं हैं। The C Book (हमेशा एक अच्छा संदर्भ) का कहना है:

"आप शायद बातचीत इन विभिन्न तत्वों के बीच दोनों जटिल और भ्रमित हो पाएंगे: कि है क्योंकि वे"

कि बोली, Declarations, Definitions and Accessibility साथ खंड, एक सहायक तालिका (8.1) है। आखिरी पंक्ति उस मामले का वर्णन करती है जिसमें आप रुचि रखते हैं। जैसा कि यह नोट करता है, स्टोरेज क्लास विनिर्देशक वाले डेटा ऑब्जेक्ट्स में बाहरी संबंध और स्थिर अवधि होती है।

+0

लेकिन आंतरिक संबंध होने के लिए हम वैश्विक को 'स्थिर int i' के रूप में परिभाषित करते हैं और यदि वैश्विक चर का डिफ़ॉल्ट संग्रहण वर्ग स्थैतिक है तो इसकी परिभाषा' स्थैतिक int i' की तरह दिखाई देगी, जिसका अर्थ है आंतरिक संबंध। –

+0

जैसा कि मैंने कहा, डिफ़ॉल्ट लिंक बाहरी है। स्थैतिक का डिफ़ॉल्ट केवल अवधि पर लागू होता है। –

+1

कार्यों में एक और स्पैनर फेंकने के लिए: सी ++ में, निरंतर वस्तुओं में डिफ़ॉल्ट रूप से आंतरिक संबंध होता है। –

16

"ग्लोबल" वैरिएबल के रूप में जाना जाने वाला सामान्य "डिफ़ॉल्ट स्टोरेज क्लास" नहीं है। जब नामस्थान स्कोप में एक चर परिभाषित किया जाता है तो यह हमेशा स्थैतिक संग्रहण अवधि है। इसे बदलने का कोई तरीका नहीं है, यही कारण है कि कुछ "डिफ़ॉल्ट" का विचार यहां लागू नहीं है। (और भंडारण अवधि क्या इसे सही ढंग से कहा जाता है।)

जब आप एक चर नाम स्थान दायरे में परिभाषित करने के लिए कीवर्ड static लागू इसे अपनी भंडारण अवधि को प्रभावित नहीं करता है - यह पहले से ही स्थिर था और यह स्थिर रहता है - लेकिन यह लिंक को प्रभावित करता है। कीवर्ड static बाहरी (डिफ़ॉल्ट) से आंतरिक तक इस तरह के चर के लिंक को बदलता है। लिंकेज एक अलग अवधारणा है, जो संग्रहण अवधि से लगभग असंबंधित है।

संबंधित मुद्दे