2012-11-23 26 views
9

में सादा निरंतर चर आंतरिक सीढ़ी में सी ++ डिफ़ॉल्ट में सादा निरंतर चर। मान लीजिए अगर मैं निम्नलिखित है:सी ++

  • मैं एक हेडर फाइल में एक स्थिरांक चर को परिभाषित (const int var = 2)

  • तो मैं दो cpp फाइल में हैडर शामिल हैं।

मुझे लगता है कि स्थिरांक चर (यानी &var) सीपीपी फ़ाइलों के दोनों में से पता हो रही कोशिश करते हैं तो उन्हें दो पते एक ही हो जाएगा? इसके अलावा मुझे इस तथ्य को सत्यापित करने के लिए एक छोटे से कामकाजी कोड की आवश्यकता है।

मुझे इसे एक प्रश्न के रूप में पोस्ट करना पड़ा क्योंकि मैं इस धागे में दिए गए this answer के लिए टिप्पणियों में यह नहीं कह सकता था क्योंकि मैं एक नौसिखिया हूं।

+2

मुझे लगता है कि आप सी ++ में रुचि रखते हैं। सी इसके नियमों के साथ काफी अलग है। तो मैं सी टैग को हटाने का सुझाव दूंगा। –

+4

निश्चित रूप से यह परीक्षण करने में केवल एक मिनट लगेगा? – Rook

+0

@Rook: नहीं। "ए" == "ए" मेरे सिस्टम पर, लेकिन वास्तव में इसकी गारंटी नहीं है। – MSalters

उत्तर

5

C++ के लिए यह आंतरिक संबंध के कारण समान नहीं होगा - ये 2 अलग-अलग वस्तुएं हैं। C में यह दूसरी तरफ है और const में बाहरी संबंध होगा, इस प्रकार आपको पुनर्वितरण के कारण एक लिंक त्रुटि मिलेगी।

+0

यही मुझे भी लगता है। लेकिन जिस लिंक का मैंने उल्लेख किया है उसका जवाब यह कहता है कि यह वही होगा। –

+0

ऐसा नहीं कहा गया है। ध्यान से पढ़ें - उस उत्तर में "वही" पता इसलिए है क्योंकि यह वही वैश्विक चर है। आपको 'बाहरी' कीवर्ड और वैश्विक चर के अर्थ के बारे में कुछ पढ़ना चाहिए। – SomeWittyUsername

+0

@UchiaItachi आप उस उत्तर को गलत तरीके से पढ़ते हैं। यह कहता है कि यदि आप उन्हें हेडर में बाहरी के रूप में घोषित करते हैं * और * उन्हें एक '.cc' फ़ाइल * में परिभाषित करते हैं, तो आपको एक ही पता मिलता है। –

0

चर के अलग-अलग पते होंगे। यह भी संभव है कि यदि आप कहीं भी परिवर्तनीय पते का संदर्भ नहीं देते हैं तो संकलन के दौरान भिन्नता को उनके मूल्य के साथ प्रतिस्थापित किया जाएगा और बाइनरी में आपको वैरिएबल वैल्यू नहीं मिलेगा।

+0

यदि इसका संदर्भ नहीं दिया गया है, तो वैरिएबल और इसका मान बाइनरी से छोड़ा जा सकता है, प्रतिस्थापित नहीं – SomeWittyUsername

2

तो क्या वे दो पते समान होंगे?

नहीं। क्योंकि हेडर को संकलन के दौरान * .cpp फ़ाइलों में शामिल किया गया है, इसलिए प्रत्येक * .cpp जिसमें आपका हेडर शामिल है, अपना स्वयं का स्थिर बना देगा।

हालांकि, यदि आप शीर्षलेख में extern const int var; का उपयोग करते हैं और * .cpp में डिफ़ॉल्ट मान सेट करते हैं, तो वे समान होना चाहिए।

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

  • कोई संबंधित समस्या नहीं^_^