परिचय: एक भाषा, दर्जनों एक्सटेंशन
\n\nअगर आप C++ सीखना शुरू कर रहे हैं, तो आपने शायद यह देखा होगा: किसी ट्यूटोरियल या GitHub पर कोड के उदाहरण में फ़ाइलों के नाम कभी main.cpp, तो कभी utils.cc, और कभी-कभी program.cxx या source.C भी होते हैं। सवाल उठता है: "इनमें क्या अंतर है? क्या ये अलग-अलग भाषाएँ हैं? या सिर्फ किसी की मनमानी?"
आप अकेले नहीं हैं। Stack Overflow पर सवाल "C++ code file extension? What is the difference between .cc and .cpp" को लाखों बार देखा जा चुका है। यह कोई आश्चर्य की बात नहीं है: अनुभवी डेवलपर्स भी कभी-कभी इन छोटी-छोटी बातों में उलझ जाते हैं। आज हम इस पहेली को हमेशा के लिए सुलझा लेंगे। आप जानेंगे कि अलग-अलग एक्सटेंशन कहाँ से आए, क्या इनमें कोई तकनीकी अंतर है, और एक शुरुआती को कौन सा एक्सटेंशन चुनना चाहिए।
\n\nसंक्षिप्त उत्तर: कोई तकनीकी अंतर नहीं है
\n\nचलिए सबसे बड़ी उलझन को दूर करते हैं। कंपाइलर और C++ भाषा के नज़रिए से, .cc और .cpp में बिल्कुल कोई अंतर नहीं है। ये सिर्फ ऑपरेटिंग सिस्टम और बिल्ड टूल्स को यह बताने के दो अलग-अलग तरीके हैं कि यह C++ का सोर्स कोड है।
कंपाइलर (GCC, Clang, MSVC) दोनों एक्सटेंशन को समझते हैं। आप hello.cc फ़ाइल ले सकते हैं, उसका नाम बदलकर hello.cpp कर सकते हैं, और कोड में एक भी बदलाव किए बिना कंपाइल कर सकते हैं। यहाँ एक सरल उदाहरण है:
// फ़ाइल: hello.cc\n#include <iostream>\n\nint main() {\n std::cout << ".cc फ़ाइल से नमस्ते!" << std::endl;\n return 0;\n}\n\nइसे इस तरह कंपाइल किया जा सकता है:
\ng++ hello.cc -o hello\n\nअब इसका नाम बदलकर hello.cpp करें:
g++ hello.cpp -o hello\n\nपरिणाम बिल्कुल एक जैसा होगा। कंपाइलर को इससे कोई फर्क नहीं पड़ता कि फ़ाइल का नाम क्या है — उसके लिए सिर्फ उसकी सामग्री और यह मायने रखता है कि आपने भाषा स्पष्ट रूप से बताई है (या कंपाइलर एक्सटेंशन से अंदाज़ा लगा लेता है)।
\n\nउत्पत्ति का इतिहास: .cc और .cpp कहाँ से आए?
\n\nयह समझने के लिए कि इतने सारे एक्सटेंशन क्यों हैं, हमें इतिहास में झाँकना होगा। C++ को C भाषा के विस्तार के रूप में बनाया गया था। शुरुआती कंपाइलर (जैसे Cfront) सिर्फ प्रीप्रोसेसर थे जो C++ को सामान्य C में बदल देते थे।
\n\n.cc एक्सटेंशन — Unix विरासत
\nUnix ऑपरेटिंग सिस्टम (और विशेष रूप से, AT&T Unix के शुरुआती संस्करणों) में छोटे, दो-अक्षर वाले एक्सटेंशन का उपयोग करने की परंपरा थी। यह फ़ाइल सिस्टम की सीमाओं के कारण था: उदाहरण के लिए, s5fs (System V) में फ़ाइल नाम की लंबाई बहुत सीमित थी। इस तरह ये आए:
\n- \n
.c— C फ़ाइलों के लिए \n .cc— C++ फ़ाइलों के लिए (C + C = CC) \n .h— हेडर फ़ाइलों के लिए \n
.cc एक्सटेंशन Unix और Linux की दुनिया में एक डी-फैक्टो मानक बन गया। कई बड़े प्रोजेक्ट (जैसे Google Chromium, LLVM) आज भी इसी का उपयोग करते हैं।
.cpp एक्सटेंशन — DOS और Windows का युग
\nजब C++ ने PC की दुनिया में लोकप्रियता हासिल करना शुरू किया, तो DOS और Windows के शुरुआती संस्करणों का पारिस्थितिकी तंत्र सामने आया। यहाँ सीमाएँ अलग थीं, लेकिन एक और ज़रूरत पैदा हुई — एक्सटेंशन को यथासंभव स्पष्ट बनाना। .cpp का मतलब है C Plus Plus — भाषा का सीधा संकेत। यह एक्सटेंशन इनकी वजह से लोकप्रिय हुआ:
- \n
- Borland C++ डेवलपमेंट एनवायरनमेंट \n
- Microsoft Visual C++ \n
- C++ की किताबें और ट्यूटोरियल (ताकि शुरुआती तुरंत समझ जाएँ कि वे किसके साथ काम कर रहे हैं) \n
अन्य एक्सटेंशन
\nइन दो मुख्य दावेदारों के अलावा, C++ की दुनिया में कुछ अन्य एक्सटेंशन भी मिल सकते हैं:
\n- \n
.cxx— "C++" का एक और रूपांतर, कुछ Unix सिस्टम (जैसे IBM AIX) में लोकप्रिय \n .C(बड़ा C) — कुछ कंपाइलर C (.c) और C++ (.C) में अंतर करने के लिए उपयोग करते हैं, उन सिस्टम पर जहाँ केस मायने रखता है (जैसे पुराने