सी ++ मानक हेडर एक "ज" प्रत्यय नहीं है। मेरा मानना है कि कारण यह है कि कई अलग-अलग पूर्व-मानक कार्यान्वयन थे जो मानक टूट जाएंगे। तो उन विक्रेताओं की आवश्यकता के बजाय उनके बाहर निकलने वाले "iostream.h" (उदाहरण के लिए) हेडर मानक मानकों के अनुरूप है (जो उनके मौजूदा उपयोगकर्ता के कोड को तोड़ देगा), मानक समिति ने फैसला किया कि वे प्रत्यय छोड़ देंगे (जो, मुझे विश्वास नहीं है तो मौजूदा कार्यान्वयन पहले से ही किया गया था)।
इस तरह, मौजूदा, गैर मानक कार्यक्रम विक्रेता के गैर-मानक पुस्तकालयों का उपयोग करना जारी रखेंगे। जब उपयोगकर्ता अपने प्रोग्राम मानकों को अनुपालन करना चाहता था, तो वे "चरण" प्रत्यय को छोड़ने के लिए "#include
" निर्देश को बदलने के लिए एक कदम उठाएंगे।
तो
#include <iostream> // include the standard library version
#include <iostream.h> // include a vendor specific version (which by
// now might well be the same)
के रूप में अन्य उत्तर का उल्लेख किया है, गैर मानक पुस्तकालयों के लेखकों या तो नामकरण सम्मेलन चुन सकते हैं, लेकिन मुझे लगता था कि वे "ज" या ".hpp" उपयोग जारी रखना चाहते हैं (बूस्ट किया के रूप में किया गया है) एक जोड़े कारणों के लिए:
- & अगर जब पुस्तकालय मानकीकृत हो जाता है, मानक संस्करण स्वचालित रूप से पिछले, अमानक एक (सभी संभावना में टूटा उपयोगकर्ता कोड के कारण) पर हावी नहीं होगा
- यह एक सम्मेलन (अधिक या कम) लगता है कि प्रत्यय के बिना हेडर मानक पुस्तकालय हैं, और प्रत्यय वाले (पुराने सी हेडर के अलावा) गैर-मानक हैं।
नोट है कि एक समान समस्या हुआ जब समिति एसटीएल के हैश नक्शे जोड़ने के लिए गया था - उन्होंने पाया वहाँ पहले से ही कर रहे हैं कि कई (भिन्न) hash_map
कार्यान्वयन है कि मौजूद है, तो बजाय एक मानक एक है कि टूट जाता है के साथ आ आज वहां बहुत सी चीजें हैं, वे मानक कार्यान्वयन "unordered_map
" कह रहे हैं। नामस्थानों को हुप्स के माध्यम से इस प्रकार के कूदने से रोकने में मदद की जानी चाहिए, लेकिन यह बहुत अच्छी तरह से काम नहीं कर रहा था (या पर्याप्त रूप से पर्याप्त उपयोग किया जा सकता है) ताकि वे बहुत सारे कोड को तोड़ने के बिना अधिक प्राकृतिक नाम का उपयोग कर सकें।
ध्यान दें कि 'सी' हेडर के लिए, सी ++ आपको <cxxxxxx>
या <xxxxxx.h>
संस्करण शामिल करने की अनुमति देता है। वह जो 'सी' से शुरू होता है और उसके पास ".h" प्रत्यय नहीं है, उसकी घोषणा std
नेमस्पेस (और संभवतः वैश्विक नामस्थान) में है, ".h" प्रत्यय वाले नाम वैश्विक नामस्थान (कुछ कंपाइलर भी नाम std
नामस्थान में रखें - यह मेरे लिए अस्पष्ट है अगर यह मानकों का अनुपालन करता है, हालांकि मुझे नुकसान दिखाई नहीं देता है)।
स्रोत
2009-01-14 02:14:02
कोई अन्य (शायद मुख्य कारण नहीं है :)) तथ्य यह इंगित करना होगा कि मानक शीर्षलेखों को फाइलों की आवश्यकता नहीं है। इसलिए वे ".h" को छोड़ने का फैसला कर सकते थे, क्योंकि यह फ़ाइल एक्सटेंशन का सुझाव देता है। –
यह एएनएसआई सी 1 9 8 9 के बाद से सच रहा है, जो एक फुटनोट के रूप में है: "एक हेडर आवश्यक रूप से एक स्रोत फ़ाइल नहीं है ..." वैसे - क्या किसी को एक कंपाइलर के बारे में पता है जो मानक शीर्षकों के लिए सामान्य स्रोत फ़ाइलों के अलावा कुछ करता है ? –
@MichaelBurr प्रीकंपिल्ड हेडर्स उस बिल को फिट नहीं करेगा? –