2012-04-27 10 views
16

यह प्रश्न बेवकूफ लग सकता है। लेकिन मैं जानना चाहता हूं कि हम ".h" का उपयोग करने के बजाय ".hh" का उपयोग C++ शीर्षलेख फ़ाइलों के विस्तार के रूप में क्यों करते हैं।सी ++: सी ++ हेडर फ़ाइलों के विस्तार के रूप में ".hh" का उपयोग करने का कारण

हेडर फाइल प्रीप्रोसेस्ड हैं और प्रीप्रोसेसर हेडर फ़ाइल के विस्तार की भी परवाह नहीं करता है। इसलिए, यहां तक ​​कि मैं ".qwe" (test.qwe) एक्सटेंशन के साथ एक हेडर फ़ाइल भी बना सकता हूं। फिर, सी .+ हेडर फ़ाइलों के विस्तार के रूप में ".hh" का उपयोग क्यों करें।

कुछ कहते हैं, हम सी फाइलों के विस्तार के रूप में ".cc" का उपयोग कर रहे हैं, सी फाइलों से भिन्न होने के लिए एक्सटेंशन (जिसमें एक्सटेंशन ".c" है), वैसे ही हम ".hh" का उपयोग कर C++ हेडर फ़ाइलों के विस्तार के रूप में उपयोग कर रहे हैं सी हेडर फ़ाइलों से अलग करने के लिए (जिसमें एक एक्सटेंशन ".h" है)। मुझे नहीं लगता कि यह एक वैध कारण है।

क्या किसी को इस तरह नामकरण का कारण पता है।

+4

यह सिर्फ एक सम्मेलन है कि कुछ लोग सी प्रोग्राम के लिए लक्षित हेडर से सी ++ कार्यक्रमों के लिए लक्षित हेडर को अलग करने के लिए उपयोग करते हैं। उससे ज्यादा कुछ नहीं। भले ही यह मान्य है चाहे वह ब्रेस प्लेसमेंट तर्कों के समान धार्मिक युद्धों में उबाल जाए। –

+0

यह भी देखें http://stackoverflow.com/q/5122728/716443। यह कुछ कंपाइलर्स के लिए एक सुराग हो सकता है कि आपका हेडर उद्देश्य C++ के लिए है। – DavidO

+1

'.hpp' सी ++ हेडर के लिए एक लोकप्रिय विकल्प है लेकिन मैं बस' .h' और '.cpp' का उपयोग करता हूं। यह मूल रूप से व्यक्तिगत वरीयता है। – AJG85

उत्तर

25

कुछ लोग कहते हैं, हम ".cc" का उपयोग कर रहे सी के लिए विस्तार के रूप में ++ फ़ाइलों सी फाइलों से अलग करने के लिए (जो एक विस्तार "ग" है), वैसे ही हम कर रहे हैं सी। हेडर फ़ाइलों के विस्तार के रूप में ".hh" का उपयोग करके सी हेडर फ़ाइलों से भिन्न होने के लिए एक्सटेंशन (जिसमें एक एक्सटेंशन ".h") है।

यही कारण है। यह सी हेडर्स से सीपीपी हेडर को अलग करने के लिए है।

कुछ प्रोग्रामर और पुस्तकालय, जैसे बूस्ट, सीपीपी शीर्षकों के लिए .hpp का उपयोग करें। मेरा व्यक्तिगत पसंद यह है:

  • example.c
  • example.cpp
  • example.h
  • example.h ++

भले ही वे सभी एक विशाल परियोजना के हैं, तो आप अभी भी पता लगा सकता है कि कौन सा है। कोई विवरण की आवश्यकता नहीं है।

5

आप अपने हेडर को अपनी इच्छानुसार नामित कर सकते हैं, उनके पास कोई एक्सटेंशन भी नहीं हो सकता है।

This FAQ हेडर नामकरण सम्मेलनों का उल्लेख करता है।

1

यह किसी भी विशिष्ट कारण के लिए नहीं है, यह केवल एक (डेवलपर- या परियोजना-विशिष्ट) सम्मेलन है। चूंकि "फाइल एक्सटेंशन" सिर्फ नाम का हिस्सा है, इससे कोई फर्क नहीं पड़ता, क्योंकि स्रोत फाइलें केवल सादा पाठ फाइलें हैं। इसके अलावा, हेडर फाइल सिर्फ फ़ाइल है कि उन्हें (#include के माध्यम से शामिल में कॉपी-पेस्ट किया जाता है, इसलिए फाइल एक्सटेंशन उनके लिए और भी कम मतलब है।

बोर्लेन्ड के पुस्तकालयों 'हेडर .hpp विस्तार किया था। सी ++ के मानक पुस्तकालय हेडर सभी में कोई एक्सटेंशन मौजूद है। यह सम्मेलन और व्यक्तिगत स्वाद का मामला।

1

यह पूरी तरह से सम्मेलन है, इसके लिए कोई विशेष कारण नहीं है। आम तौर पर लोग एक परियोजना, या टीमों या यहां तक ​​कि एक पूरी कंपनी में लगातार रहने की कोशिश करते हैं। यह डेवलपर्स की मदद करता है जो लंबे समय से समझने के बाद अपना कोड उठाते हैं कि आप abc.hh फाइल abc.cc के साथ जाते हैं और abc.h abc.c. के साथ जाता है।

1

एक कारण, यदि मैं एक डीएल बना रहा हूं जिसमें सी ++ कोड के गुच्छा के आसपास सी एपीआई है, तो मुझे अपने सी हेडर के बीच अंतर करने की आवश्यकता है, जिसे क्लाइंट सी कार्यों और मेरे आंतरिक सी ++ हेडर आयात करने के लिए उपयोग कर सकता है। स्पष्ट रूप से ग्राहक को आयात करने की अनुमति नहीं देना चाहते हैं।

एक सी फ़ंक्शन के लिए बाध्यकारी अधिकांश भाषाओं/वातावरण से लगभग कोई ओवरहेड नहीं है। आपको सी ++ में प्राप्त सभी जटिलताओं के बारे में सोचना नहीं है। तो अगर मैं ऐसी पुस्तकालय के साथ काम करना चाहता था, तो मैं अपने सी ++ को अपने सी इंटरफ़ेस से अलग करना सुनिश्चित करता हूं।

1

मुझे लगता है कि यह ज्यादातर एक सामाजिक सम्मेलन है।

हालांकि, हाल के जीसीसी compilers foo.hh.gch या foo.h.gch जो अनिवार्य रूप से संकलक (cc1plus कार्यक्रम g++ द्वारा शुरू) के एक लगातार स्मृति ढेर छवि है की तरह एक (एकल) हैडर foo.hh या foo.h कुछ में संकलित करने में सक्षम हैं के बाद यह पार्स था वह हेडर

ध्यान दें कि सी ++ 11 मानक लाइब्रेरी हेडर फ़ाइलों को परिभाषित करती है जैसे उदा। बिना किसी एक्सटेंशन के <vector>

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