सी ++ में #include
निर्देश और using namespace
के बीच क्या अंतर है? साथ ही आप अपने नेमस्पेस को अलग फाइलों के रूप में स्टोर करते हैं और ऐसी फाइलों के लिए फ़ाइल एक्सटेंशन क्या है?सी ++: नेमस्पेस और #include
उत्तर
अपने प्रश्न का उत्तर देने के लिए, मैं थोड़ा पीछे जाऊंगा और सी और सी ++ की कुछ मूलभूत बातें ले जाऊंगा।
सी/सी ++ संकलित करते समय, स्रोत फ़ाइलों को वास्तविक निष्पादन योग्य में संकलित करना वास्तव में दो चरणों, संकलन और लिंकिंग है। संकलन चरण एक समय में एक .cpp फ़ाइल लेता है और इसे संकलित करता है। अन्य .cpp फ़ाइलों की सामग्री कंपाइलर के लिए दृश्यमान नहीं हैं। यह एक "ऑब्जेक्ट फ़ाइल" उत्पन्न करता है (मुझे नहीं पता कि इसे ऐसा क्यों कहा जाता है)। अंतिम ऑब्जेक्टिव बनाने के लिए सभी ऑब्जेक्ट फ़ाइलों को लिंकर द्वारा तब जोड़ा जाता है।
यह सी ++, घोषणाओं और परिभाषाओं में दो महत्वपूर्ण अवधारणाओं को लाता है। एक घोषणा निर्दिष्ट करती है कि कुछ (एक चर या एक समारोह) कहीं मौजूद होगा। निम्नलिखित
void Foo();
इसका मतलब यह है कि हम संकलक है कि कहीं वहाँ एक समारोह फू() है कि कोई तर्क लेता है हो सकता है और कोई मान प्रदान करेंगे बता दिया है समारोह फू() की घोषणा है।
एक परिभाषा निर्दिष्ट करती है कि वास्तव में कौन सा कार्य करता है। यहाँ समारोह परिभाषित
void Foo() { cout << "Foo!!"; }
चलो एक और समारोह, बार परिभाषित किया जाता है()
void Bar() {
Foo();
cout << "bar";
}
इस समारोह समारोह फू() कहते हैं। फ़ंक्शन foo को पहले से ही उसी फ़ाइल में घोषित या परिभाषित नहीं किया गया है, तो इस फ़ंक्शन को संकलित नहीं किया जा सकता है। तो घोषणा स्वयं किसी संकलित कोड का उत्पादन नहीं करती है।उन्हें बस वहां रहना है।
यदि फ़ंक्शन फ़ू() इस फ़ाइल में परिभाषित नहीं है, लेकिन एक अलग .cpp फ़ाइल है, तो यह इन दो कार्यों के बीच कनेक्शन बनाने के लिए लिंकर का काम है। यदि फ़ंक्शन Foo() को कहीं भी परिभाषित नहीं किया गया है, तो आपको एक लिंकर त्रुटि मिलेगी, न कि संकलक त्रुटि।
यह हेडर फ़ाइलों की अवधारणा पर आता है। शीर्षलेख फ़ाइलें वह जगह होती हैं जहां आप अपनी घोषणाएं संग्रहीत करते हैं। शीर्षलेख फ़ाइल की सामग्री को शामिल करने के लिए # शामिल करने का उपयोग करते समय, वास्तव में क्या होता है यह है कि प्रीप्रोसेसर (वास्तविक संकलक से पहले निष्पादित एक चरण) शामिल फ़ाइल लोड करेगा और सामग्री को मूल स्रोत फ़ाइल में "पेस्ट" करेगा। तो संकलक फ़ाइल को देखेगा जैसे कि संपूर्ण हेडर फ़ाइल वास्तव में C++ फ़ाइल में चिपका दी गई थी।
तो जब आप सी ++ में कार्यक्रम, आप सामान्य रूप से अपने परिभाषाओं सीपीपी फाइलों में जगह होगा, और आप ज फ़ाइलों में अपने घोषणाओं स्थापित करेंगे दूसरी ओर
नेमस्पेस बस एक तरह से करने के लिए तार्किक समूह अपने कोड है ।
तो नहीं, नामस्थान अलग फ़ाइलों में संग्रहीत नहीं हैं, और उनके पास एक विशिष्ट फ़ाइल एक्सटेंशन नहीं है। अगर मेरे पास एकाधिक नामस्थानों वाला प्रोजेक्ट था तो मैं प्रत्येक नेमस्पेस के लिए एक अलग निर्देशिका बना सकता हूं (और फिर, शायद नहीं, यह स्थिति पर निर्भर करेगा)।
सी ++ में, #include
जबकि namespace
तार्किक मॉड्यूल में अपनी वस्तुओं (नाम स्थान सी पर लागू नहीं होता)
उदाहरण के लिए रखने के लिए प्रयोग किया जाता है अपनी परियोजना के लिए फ़ाइलों को जोड़ने के लिए प्रयोग किया जाता है, तो आप फ़ाइल में एक सदिश वर्ग हो सकता है "vector.h
" तो आप इसे अपनी परियोजना में शामिल करते हैं।
वेक्टर एक बड़ा पुस्तकालय (मानक पुस्तकालय) एसटीडी का एक हिस्सा है, तो आप
std::vector
लेकिन जब से प्रोग्रामर आलसी हैं और std :: सब कुछ खत्म हो लिखने के लिए नहीं करना चाहते हैं के साथ उपयोग कर सकते हैं जगह (मानक पुस्तकालय में कई बहुत उपयोगी भाग हैं), आप
using namespace std
अपनी फ़ाइल के शीर्ष पर लिख सकते हैं। यह संकलक को बताएगा कि हर बार जब यह एक प्रकार (जैसे वेक्टर) देखता है, तो नामस्थान std में भी जांच करें क्योंकि परिभाषा वहां हो सकती है। इस तरह, निम्नलिखित कथन समकक्ष बन जाते हैं।
std::vector
vector
vector.h में, आप,
namespace std
{
class vector { /* Implementation */ }
}
तो #include
फ़ाइलें जोड़ने के लिए है की तरह कुछ देखना चाहिए using namespace
अपने कोड क्लीनर रखने के लिए और "सार्थक" पुस्तकालयों में पैक करने के लिए है, जबकि। प्रोग्रामिंग करते समय आप using namespace
को छोड़ सकते हैं लेकिन आपको पूरी तरह से #include
- 1. सी ++ नेमस्पेस और टेम्पलेट
- 2. सी ++ नेमस्पेस
- 3. एक्सएमएल नेमस्पेस और सी # सीस्पोज
- 4. सी ++ नेमस्पेस और स्थिर चर
- 5. एक्सएसडी नेमस्पेस से सी # नेमस्पेस
- 6. जावा बनाम '#include' में सी/सी ++
- 7. आगे घोषणा और नेमस्पेस (C++)
- 8. सी ++ नेमस्पेस उपयोग और नामकरण नियम
- 9. नेमस्पेस
- 10. सी # नेमस्पेस web.config
- 11. C#include फ़ाइल नाम
- 12. सी ++ नेमस्पेस फ़ंक्शंस
- 13. एक्सएमएल क्रमबद्धता + नेमस्पेस (सी #)
- 14. सी ++ में नेमस्पेस शामिल करें और उपयोग करें
- 15. LINQ ".Include" सबक्वेरी
- 16. नेमस्पेस और कक्षा संघर्ष
- 17. एक्सएसएलटी फ़ंक्शंस और नेमस्पेस
- 18. PHP नेमस्पेस और इंटरफेस
- 19. GUID और नेमस्पेस
- 20. नेमस्पेस कॉन्टेक्स्ट और XPath
- 21. नेमस्पेस शुद्धता
- 22. शीर्षलेख और स्रोत (सीपीपी) में एक सी ++ नेमस्पेस बनाना
- 23. नेमस्पेस
- 24. नियंत्रक नेमस्पेस और रूटिंग मुद्दा
- 25. रिशेर्पर और नेमस्पेस ऊर्फ क्वालीफायर
- 26. XPath, एक्सएमएल नेमस्पेस और जावा
- 27. रूट नेमस्पेस और असेंबली नाम
- 28. नेमस्पेस पैकेज और पीआईपी इंस्टॉल-
- 29. एक्सएमएल नेमस्पेस 'क्लियर-नेमस्पेस: YYY'
- 30. सी ++ नेमस्पेस - "उपयोग" या स्पष्ट रूप से कहा गया है?
सी में कोई नामस्थान नहीं है, केवल C++ में बदला गया है। –