2010-11-17 4 views
6

क्यों किसी भी प्रोग्रामिंग भाषा stdio.h, iostream.h या using System तरह डिफ़ॉल्ट पुस्तकालयों लोड नहीं किया ताकि घोषणा से परहेज किया जाता है?किसी प्रोग्रामिंग भाषा में डिफ़ॉल्ट नेमस्पेस/पुस्तकालयों को घोषित करने का कोई सम्मेलन क्यों है?

इन नाम स्थान के रूप में/पुस्तकालयों किसी भी प्रोग्राम, क्यों compilers उम्मीद यह उपयोगकर्ता द्वारा घोषित किए जाने की जरूरत होती है।

नाम स्थान/हेडर का उपयोग किए बिना किसी भी प्रोग्राम मौजूद है? भले ही हाँ, हानिरहित डिफ़ॉल्ट पुस्तकालयों को लोड करने में क्या गलत है?

मुझे लगता है कि इसका मतलब यह नहीं है .. मैं कोड की एक पंक्ति लिखने के लिए आलसी हूँ, लेकिन यह कम समझ में आता है (मुझे के अनुसार) एक संकलक तथाकथित डिफ़ॉल्ट thingummies एक संकलन में समाप्त की घोषणा के लिए रोना के लिए त्रुटि।

उत्तर

4

ऐसा इसलिए है क्योंकि प्रोग्राम हैं जो मानक पुस्तकालयों के बिना लिखे गए हैं। उदाहरण के लिए, एम्बेडेड सिस्टम पर चलने वाले बहुत सारे सी प्रोग्राम हैं जो stdio.h प्रदान नहीं करते हैं, क्योंकि यह उन प्लेटफ़ॉर्म पर कोई समझ नहीं आता है (सी में, इस तरह के वातावरण को "फ्रीस्टैंडिंग" के रूप में जाना जाता है, और अधिक के विपरीत सामान्य "होस्टेड")।

+0

धन्यवाद। :) बीए भी deserves .. –

0

क्योंकि पुस्तकालयों भाषा के बाहरी घटक हैं। यदि एक दिन सभी पुस्तकालय (या इसका हिस्सा) हेडर बदलता है, तो भाषा तत्व नाम उनके साथ नहीं बदलता है। कंपाइलर केवल प्रोग्रामिंग भाषा के सिंटैक्स और नियमों की जांच करता है।

+0

काफी दृढ़ विश्वास। –

+1

सी और सी ++ के मामलों में यह सच नहीं है - 'stdio.h' और' iostream' शीर्षलेख * भाषा विनिर्देश का हिस्सा हैं। यदि उनका इंटरफ़ेस बदलता है, तो भाषा परिभाषा के अनुसार बदल गई है। उनकी सटीक सामग्री, निश्चित रूप से कार्यान्वयन तक हैं। –

+0

हेडर आईएसओ/एएनएसआई सी मानक का हिस्सा हैं (मानकीकृत है कि कौन सी हेडर फाइलों की आपूर्ति की जानी चाहिए) लेकिन भाषा का हिस्सा नहीं है। कुछ कार्यक्रमों को I/O फ़ंक्शन को लागू करने की आवश्यकता होती है और कुछ नहीं। सी सिद्धांत "संसाधनों का आर्थिक उपयोग" है। उपयोगी उत्तर के लिए – pyCoder

1

stdio.h/iostream (ज) के लिए: त्वरित जवाब है कि अपने सॉफ्टवेयर की सबसे बड़ी भाग में, वे की जरूरत (निश्चित नहीं दोनों) नहीं हैं। हेडलेस डिवाइस/सर्वर के बजाय लॉगिंग मॉड्यूल होना चाहिए और जीयूआई के साथ इंटरफेस करने के लिए हमेशा एक कंसोल नहीं है।

2

"डिफ़ॉल्ट" पुस्तकालय "किसी भी कार्यक्रम में आवश्यक" नहीं हैं, और वास्तव में ऐसे कई मामले हैं जहां वे उपलब्ध नहीं हैं (ऑपरेटिंग सिस्टम कर्नेल/ड्राइवर, माइक्रोकंट्रोलर इत्यादि)। और मुख्यधारा में अधिक, कई उच्च स्तरीय ग्राफिकल प्रोग्राम मानक I/O के बजाय सिस्टम-विशिष्ट जीयूआई/ग्राफिक्स पुस्तकालयों का उपयोग करते हैं।

+0

उपयोगी जानकारी +1 के लिए धन्यवाद :) –

1

कई भाषाओं (विशेष रूप से स्क्रिप्टिंग भाषाएं, और भाषाएं जो भाषा spec के हिस्से के रूप में मानक रनटाइम लेती हैं) do ऐसा करें।

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

0

कैफ के अनुवर्ती करने के लिए जवाब।

आपको इन शीर्षकों/पुस्तकालयों के बारे में संकलक को बताना होगा ताकि आपको वह कुछ भी शामिल न करना पड़े जो आप नहीं चाहते हैं। क्योंकि वे प्रत्येक कार्यक्रम में आवश्यक नहीं हैं। कोई भी प्रोग्रामर सी या सी ++ में लाइब्रेरी लिखने में सक्षम होता है जो किसी भी रनटाइम पुस्तकालयों पर निर्भर नहीं होता है। यह क्षमता संभवतः दुबला सॉफ़्टवेयर के रूप में लिखना संभव बनाता है, और मेमोरी/डिस्कस्पेस/संकलन समय/लिंक समय बचाएं (जो आपको सबसे ज्यादा चाहिए) चुनें। निम्न स्तर की भाषाओं में आपको केवल वही चीज़ चाहिए जो आपको चाहिए, और कुछ भी नहीं।

0

नाम टक्कर समस्या मौजूद है। भाषा मानकों के विकास के रूप में, वे अधिक से अधिक विशेषताओं को प्रदान करते हैं, जिससे उन्हें और अधिक नाम मिलते हैं। और उपयोगकर्ता प्रोग्राम में परिभाषित सिस्टम नाम और नाम की संभावना बढ़ जाती है। इससे बचने के लिए, मॉड्यूल में परिभाषित नई विशेषताएं जो प्रोग्राम शामिल नहीं होने पर शामिल नहीं होंगी।चूंकि सिस्टम लाइब्रेरी कई सामान्य उपयोग शब्दों का उपयोग अपने प्रतीक के रूप में करते हैं (जैसे open, restricted) समस्या गंभीर है।

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

+0

उपयोगी उत्तर के लिए धन्यवाद :) –

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