.h या .hpp: C++ हेडर फ़ाइलों के लिए? एक बार और हमेशा के लिए समझें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

.h या .hpp: C++ हेडर फ़ाइलों के लिए? एक बार और हमेशा के लिए समझें

\n\n

यदि आपने कभी C++ में कुछ हफ्तों से अधिक समय तक कोड लिखा है, तो आपने निश्चित रूप से इस प्रश्न का सामना किया होगा। आप किसी और का प्रोजेक्ट खोलते हैं — वहाँ .h है। आप अपना खुद का शुरू करते हैं — आपके दिमाग में एक आवाज़ आती है: "या शायद .hpp बेहतर है?" या इसके विपरीत: आप .h के प्रबल प्रशंसक हैं, और आपका सहकर्मी दावा करता है कि .hpp ही एकमात्र सही रास्ता है।

\n\n

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

\n\n

संक्षिप्त उत्तर: मूलभूत अंतर क्या है?

\n\n

अगर बहुत संक्षेप में कहें:

\n\n
    \n
  • .h — हेडर फ़ाइलों के लिए पारंपरिक एक्सटेंशन, जो C से आया है। इसका उपयोग C और C++ दोनों में किया जाता है।
  • \n
  • .hpp — एक अधिक आधुनिक एक्सटेंशन, जो स्पष्ट रूप से इंगित करता है: "यह C++ है, C नहीं।" इसे C++ हेडर को C हेडर से अलग करने के लिए बनाया गया था।
  • \n
\n\n

लेकिन शैतान, हमेशा की तरह, विवरण में है। आइए गहराई से जानें।

\n\n

ऐतिहासिक संदर्भ: .h और .hpp कहाँ से आए?

\n\n

C भाषा ने अनादि काल से हेडर के लिए .h का उपयोग किया है। जब C++ आया, तो शुरुआत में प्रोग्रामर बस .h का उपयोग करते रहे — और यह सामान्य है। C++ मानक पुस्तकालय (जैसे <iostream>) ने पूरी तरह से एक्सटेंशन को छोड़ दिया, लेकिन यह एक और कहानी है।

\n\n

एक्सटेंशन .hpp C और C++ कोड को अलग करने की आवश्यकता के जवाब में आया। कल्पना करें: आपके पास एक बड़ा प्रोजेक्ट है जहाँ कुछ फ़ाइलें C में हैं, कुछ C++ में। आप इसे संभवतः विभिन्न कंपाइलरों या विभिन्न फ़्लैग्स के साथ बना रहे हैं। आप जल्दी से कैसे जानेंगे कि कौन सा हेडर किस भाषा के लिए है? सही — एक्सटेंशन देखकर।

\n\n

इस प्रकार .hpp ("C Plus Plus header" से) शुद्ध C++ हेडर के लिए समुदाय में एक वास्तविक मानक बन गया, विशेष रूप से Boost जैसी लाइब्रेरीज़ में।

\n\n

.h का उपयोग कब करें?

\n\n

.h को अलविदा कहने में जल्दबाजी न करें। इसकी अपनी खूबियाँ हैं:

\n\n
    \n
  • C के साथ संगतता। यदि आपकी हेडर फ़ाइल को C और C++ दोनों कोड से शामिल किया जाना है — तो केवल .h। कोई विकल्प नहीं।
  • \n
  • रूढ़िवादी प्रोजेक्ट। बड़े कोड बेस में, जहाँ शैली वर्षों से बनी है, एक्सटेंशन को .hpp में बदलना एक अनावश्यक परेशानी है।
  • \n
  • न्यूनतमवाद। चार के बजाय तीन अक्षर। छोटी बात, लेकिन अच्छी लगती है।
  • \n
\n\n

उदाहरण: C और C++ के साथ संगत हेडर

\n\n
// math_utils.h\n#ifndef MATH_UTILS_H\n#define MATH_UTILS_H\n\n#ifdef __cplusplus\nextern "C" {\n#endif\n\nint add(int a, int b);\nint multiply(int a, int b);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // MATH_UTILS_H\n
\n\n

ऐसी फ़ाइल को .c और .cpp दोनों में शामिल किया जा सकता है। यदि आपने इसे math_utils.hpp नाम दिया होता, तो C प्रोग्रामर भ्रमित हो सकता था: "क्या यह वास्तव में मेरे लिए है?"

\n\n

.hpp का उपयोग कब करें?

\n\n

यहाँ सब कुछ उल्टा है: .hpp आधुनिक C++ प्रोग्रामर की पसंद है। विशेष रूप से यदि:

\n\n
    \n
  • आप केवल C++ में लिखते हैं। प्रोजेक्ट में कोई C नहीं है और न ही होगा।
  • \n
  • आप टेम्पलेट, STL, एक्सेप्शन का उपयोग करते हैं। ये विशुद्ध C++ सुविधाएँ हैं, और एक्सटेंशन .hpp इस पर जोर देता है।
  • \n
  • आप C++ कोड को C से स्पष्ट रूप से अलग करना चाहते हैं। मिश्रित प्रोजेक्ट में यह भ्रम से बचाता है।
  • \n
  • आप आधुनिक प्रथाओं का पालन करते हैं। Boost, Qt (आंशिक रूप से), कई नई लाइब्रेरीज़ .hpp का उपयोग करती हैं।
  • \n
\n\n

उदाहरण: क्लास के साथ विशिष्ट C++ हेडर

\n\n
// player.hpp\n#ifndef PLAYER_HPP\n#define PLAYER_HPP\n\n#include <string>\n#include <vector>\n\nclass Player {\npublic:\n    Player(const std::string& nam                

ब्लॉग

पुस्तक अनुशंसाएँ