उत्तर
केवल अंतर यह है कि फ़ाइल चर केवल फ़ाइल के अंदर पहुंच योग्य हैं। लेकिन उनके पास एक ही जीवन का समय है।
सी और सी ++ में आप वैश्विक चर केवल उस फ़ाइल से पहुंच सकते हैं जिसमें घोषणा के सामने स्थिर कीवर्ड का उपयोग करके घोषित किया जाता है। ग्लोबल जो स्थिर कीवर्ड का उपयोग नहीं करते हैं वे प्रोग्राम में संकलित किसी भी सी या सी ++ फ़ाइल से पहुंच योग्य होते हैं।
स्थिर वैश्विक विधि को अज्ञात नेमस्पेस के पक्ष में सी ++ में बहिष्कृत किया गया है। अज्ञात नेमस्पेस के अंदर रखी गई कोई भी घोषणाएं उस फ़ाइल के भीतर ही पहुंच योग्य हैं।
क्या उपयोगकर्ता परिभाषित कक्षाओं के लिए भी मान्य है? मैंने फ़ाइल 1 में एक ऑब्जेक्ट घोषित कर दिया है और मैं इसे दोनों फाइलों (फ़ाइल 1, फ़ाइल 2), में एक्सेस करना चाहता हूं, मैंने फ़ाइल 1 में '# शामिल फ़ाइल 2.h' और' कक्षा क्लासनाम 'रखा है, फ़ाइल 2 में यह पहचानता है कि यह पहचानता है कक्षा .. लेकिन फिर भी यह मुझे एक त्रुटि देता है !! – Katia
सी ++ प्रोग्राम एक समय में एक अनुवाद इकाई संकलित किए जाते हैं (मूल रूप से इसका मतलब है कि प्रत्येक .cpp फ़ाइल स्वतंत्र रूप से संकलित की जाती है)।
डिफ़ॉल्ट रूप से, चर नहीं const
हैं उन कार्यों को करता inline
और typedef
रों नहीं हैं आंतरिक संबंध है: इसका मतलब है कि वे अन्य अनुवाद इकाइयों को दिखाई नहीं देते। यदि अन्य अनुवाद इकाइयां आंतरिक संबंध वाले प्रतीक को संदर्भित करती हैं ( घोषित करने के बाद, जिसके लिए चर के लिए कीवर्ड extern
आवश्यक है), लिंकर उन्हें ढूंढने में सक्षम नहीं होगा।
स्पष्ट रूप से आंतरिक लिंकेज की आवश्यकता के लिए कीवर्ड static
का उपयोग करें या बेहतर, अनाम नामों का उपयोग करें।
नोट: ये नियम कक्षा/संरचना/नामस्थान स्कोपिंग के साथ कुछ लेन-देन के साथ सी ++ के साथ ही सी पर लागू होते हैं। (मैंने यह नहीं देखा कि प्रश्न सी ++ के बारे में था, सी नहीं।
याद रखें कि (ज्यादातर मामलों में) सी स्रोत फ़ाइलों को ऑब्जेक्ट फ़ाइलों में संकलित किया जाता है। ऑब्जेक्ट फ़ाइलों में एक 'निर्यात' तालिका होती है जो लिंकर को बताती है (जब लिंकिंग) यह कौन सा प्रतीक प्रदान करता है। एक प्रतीक एक नाम है (इसका सटीक नाम एबीआई पर निर्भर करता है) एक समारोह या चर (ज्यादातर मामलों में) का जिक्र करता है।
आप अपनी सी स्रोत फ़ाइल में एक वैश्विक चर घोषित करते हैं, तो इस तरह:
// fileA.c
int hello = 42;
void printMessage() {
printf("Hello, %d world(s)!\n", hello);
}
hello
और printMessage
निर्यात किया जाता है। जब कोई सी ऑब्जेक्ट फ़ाइल 'hello
' (एक साधारण एबीआई मानते हुए) नामक प्रतीक का अनुरोध करती है, तो लिंकर fileA.c
द्वारा निर्यात किए गए लिंक को जोड़ता है।
अब अन्य मामले के लिए। जब आप इस तरह एक फ़ाइल स्थानीय चर घोषित:
// fileB.c
static int world = 9001;
static void messagePrint() {
printf("It's over %d!\n", world);
}
world
और messagePrint
नहीं निर्यात कर रहे हैं। जब कोई सी ऑब्जेक्ट फ़ाइल 'hello
' नामक प्रतीक का अनुरोध करती है, तो लिंकर hello
के साथ कनेक्ट नहीं कर सकता क्योंकि fileB.obj
(या जो कुछ भी) में इसके बारे में कोई जानकारी नहीं है।
messagePrint
कैसे world
के बारे में पता कर सकते हैं? दोनों एक ही अनुवाद इकाई में हैं। दायरा यहां ले जाता है। मुझे यकीन है कि आपको scope through Google पर बहुत सारी जानकारी मिल जाएगी।
(क्या प्रतीक का नाम सी में फ़ंक्शन/परिवर्तनीय नाम मानक से मेल खाता है? मुझे पता है कि यह सी ++ (जहां नाम मैंगलिंग के लिए कोई मानकीकरण नहीं है) के लिए अलग है, इसलिए मैं पहली जगह एबीआई का उल्लेख करता हूं।)
((एबीआई तो सही शब्द, यहां तक कि;? पी))
- 1. C/C++ बनाम स्थिर वैश्विक
- 2. जब स्थिर वैश्विक चर C++
- 3. वैश्विक चर वैश्विक क्षेत्र
- 4. वैश्विक चर
- 5. वैश्विक चर
- 6. जावास्क्रिप्ट बंद बनाम वैश्विक चर
- 7. वहाँ एक वैश्विक चर और वैश्विक वस्तु
- 8. पीएचपी वैश्विक चर भले ही वैश्विक कीवर्ड
- 9. ओकैमल खाली वैश्विक चर
- 10. वैश्विक चर, PHP
- 11. आवेदन व्यापक वैश्विक चर
- 12. कृपया वैश्विक चर
- 13. जीसीसी, अनियमित वैश्विक चर
- 14. रेल में वैश्विक चर
- 15. वैश्विक चर और मैपलियर
- 16. वैश्विक चर और अजगर
- 17. टाइपस्क्रिप्ट वैश्विक चर
- 18. जावास्क्रिप्ट चर वैश्विक
- 19. SASS वैश्विक चर आंशिक
- 20. एक वैश्विक चर
- 21. जावास्क्रिप्ट वैश्विक चर
- 22. उद्देश्य-सी - वैश्विक चर
- 23. सी कांटा वैश्विक चर
- 24. Greasemonkey और वैश्विक चर
- 25. वैश्विक चर का उपयोग
- 26. Django, वैश्विक टेम्पलेट चर
- 27. वैश्विक चर और एमपीआई
- 28. CodeIgniter वैश्विक चर
- 29. एसएसआईएस वैश्विक चर
- 30. पायथन कार्य वैश्विक चर?
बहाना, मेरी अज्ञानता लेकिन मैं आ मुख्य रूप से सी/उद्देश्य सी पृष्ठभूमि से आते हैं और मैं एक फ़ाइल चर कभी नहीं सुना है ... Do आपका मतलब वैश्विक वैरिएबल है जो केवल उस फ़ाइल में दिखाई देता है जिसे परिभाषित किया गया है? – hhafez
स्पष्ट करें: मुझे लगता है कि आपका मतलब है कि कीवर्ड "स्थिर" का उपयोग किया गया है या नहीं? (स्थिर वैश्विक वर्र्स केवल उस फ़ाइल में दिखाई दे रहे हैं) –