2010-06-04 14 views

उत्तर

35

iostream.h उन कंपाइलर्स द्वारा बहिष्कृत किया गया है जो इसे प्रदान करते हैं, iostream सी ++ मानक का हिस्सा है।

स्पष्ट रूप से स्पष्ट करने के लिए वर्तमान सी ++ मानक (INCITS आईएसओ आईईसी 14882 2003) में iostream.h का कोई उल्लेख नहीं है।

संपादित करें: जैसा कि @ जेरी ने उल्लेख किया है, न केवल मौजूदा मानक का उल्लेख नहीं है, लेकिन सी ++ के लिए कोई मानक इसका उल्लेख नहीं करता है।

+0

का उपयोग करें, आपको शायद std नेमस्पेस का उल्लेख करना चाहिए। – zdan

+0

@ जेरी: शब्द को पकड़ लिया लेकिन अर्थ –

+0

@ जेरी: स्पष्ट, जोड़ा गया। –

10

iostream एक मानक शीर्षलेख है। iostream.h एक गैर-मानक शीर्षलेख है जो पूर्व-मानक C++ में बहुत आम था, और जो iostream विकसित हुआ था। पुराने कार्यक्रमों के साथ संभवतः उपयोग के लिए iostream.h होना अभी भी आम है।

यदि आपके कार्यान्वयन में iostream.h की एक कार्यशील प्रति है, तो यह शायद iostream जैसा ही है, सिवाय इसके कि iostream में सबकुछ std नेमस्पेस में है, जबकि iostream.h आमतौर पर नामस्थान से पहले था, और उनका उपयोग नहीं किया था।

अपने कार्यान्वयन दोनों iostream और iostream.h है, तो iostream की तरह काम करने की संभावना है:

namespace std 
{ 
#include <iostream.h> 
} 

हालांकि कि जरूरी नहीं कि यह कैसे लिखा है है।

+1

असल में, अक्सर * बहुत * अधिक अंतर होता है - iostream.h में स्ट्रीम आमतौर पर टेम्पलेट नहीं थे जैसे वे iostream में हैं। यदि आप सरल पढ़ने और लिखने से परे बहुत कुछ करते हैं (उदाहरण के लिए, किसी भी मैनिपुलेटर्स को लिखें) अंतर अक्सर पर्याप्त होता है। –

+0

@ जेरी: आप सही हैं, लेकिन दुर्भाग्यवश आप उस प्रणाली की यादें वापस ला रहे हैं जो मुझे परिवर्तित करना था जिसमें धाराओं पर कुछ बीमार दस्तावेज वाली जादूगर थी। हालांकि, इसका मतलब यह नहीं है कि आधुनिक कार्यान्वयन में iostream.h और iostream के बीच एक महत्वपूर्ण अंतर है। अगर मुझे याद है, तो मैं घर पहुंचने पर अपने जीसीसी कार्यान्वयन को देखूंगा। –

+1

हां, मैंने अन्यत्र टिप्पणी क्यों की कि iostream और iostream.h के बीच अंतर व्यापक रूप से भिन्न होते हैं। कुछ में, iostream.h सभी सामग्रियों के लिए 'उपयोग' घोषणाओं के साथ एक वर्तमान कार्यान्वयन है। अन्य मामलों में, यह एक पुराना कार्यान्वयन है (और कुछ में, बीच में कुछ ...) –

2

जब सी ++ पहली बार बनाया गया था, तो मानक रनटाइम लाइब्रेरी में सभी फ़ाइलें समाप्त हो गईं। एच। जीवन सुसंगत था, और यह अच्छा था। Cout और cin का मूल संस्करण iostream.h में रहता था। जब भाषा एएनएसआई समिति द्वारा मानकीकृत की गई थी, तो उन्होंने रनटाइम लाइब्रेरी में सभी कार्यों को std नेमस्पेस (जो आम तौर पर एक अच्छा विचार है) में स्थानांतरित करने का निर्णय लिया। हालांकि, इसने एक समस्या प्रस्तुत की: यदि वे सभी कार्यों को std नेमस्पेस में ले जाते हैं, तो पुराने कार्यक्रमों में से कोई भी काम नहीं करेगा!

पुराने मुद्दों के लिए पिछड़े संगतता को बनाए रखते हुए, इस समस्या को हल करने का प्रयास करने के लिए, हेडर फ़ाइलों का एक नया सेट पेश किया गया था जो समान नामों का उपयोग करते हैं लेकिन .h एक्सटेंशन की कमी है। इन नई शीर्षलेख फ़ाइलों में उनकी सभी कार्यक्षमता std namespace के अंदर है। इस तरह, पुराने प्रोग्राम जिनमें #include <iostream.h> शामिल हैं, को फिर से लिखने की आवश्यकता नहीं है, और नए प्रोग्राम #include <iostream> कर सकते हैं।

जब आप मानक लाइब्रेरी से हेडर फ़ाइल शामिल करते हैं, तो सुनिश्चित करें कि यदि आप मौजूद हैं तो गैर .h संस्करण का उपयोग करें। अन्यथा आप हेडर के बहिष्कृत संस्करण का उपयोग करेंगे जो अब समर्थित नहीं है।

इसके अतिरिक्त, सी ++ में अभी भी उपयोगी सी पुस्तकालयों में से कई पुस्तकालयों को सी उपसर्ग दिया गया था (उदा। Stdlib.h cstdlib बन गया)। टकराव नामकरण से बचने में मदद के लिए इन पुस्तकालयों की कार्यक्षमता को स्टडी नेमस्पेस में भी स्थानांतरित कर दिया गया था।

हालांकि, जब आप अपनी खुद की हेडर फाइलें लिखते हैं, तो आपको उन्हें एक .h एक्सटेंशन देना चाहिए, क्योंकि आप अपना कोड std नेमस्पेस में नहीं डाल पाएंगे।

नियम: पुस्तकालय के गैर .h संस्करण का उपयोग करें यदि यह मौजूद है, और std namespace के माध्यम से कार्यक्षमता तक पहुंचें। यदि गैर .h संस्करण मौजूद नहीं है, या आप अपने स्वयं के शीर्षलेख बना रहे हैं, तो .h संस्करण

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