C++ हर जगह: Windows, Linux और macOS के लिए एक साथ कोड कैसे लिखें

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

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

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

एक दिन तुम ऐसा कोड लिखोगे जो हर जगह चलेगा

\n

कल्पना करो: तुम C++ में एक शानदार प्रोजेक्ट बना रहे हो, सब कुछ Windows पर पूरी तरह से काम कर रहा है। तुम्हारा दोस्त Linux के लिए वर्जन बनाने को कहता है। तुम आह भरते हो, Makefile में जाते हो, पथ बदलते हो, कंपाइलर बदलते हो, #ifdef _WIN32 पर अटक जाते हो और तीन घंटे बाद एक बाइनरी मिलती है जो फिर भी segmentation fault के साथ क्रैश हो जाती है। परिचित लगता है?

\n

C++ में क्रॉस-प्लेटफ़ॉर्म डेवलपमेंट कोई जादू नहीं है, बल्कि अनुशासनों और उपकरणों का एक सेट है। इस लेख में, हम देखेंगे कि ऐसा कोड कैसे लिखें जो Windows, Linux और macOS पर बिना आँसुओं के काम करे, वास्तविक कोड उदाहरणों और तैयार समाधानों के साथ। चलो शुरू करते हैं!

\n\n

C++ क्रॉस-प्लेटफ़ॉर्म के लिए आदर्श क्यों है (और यह दर्द क्यों है)

\n

C++ की ताकतें - कंपाइलेबिलिटी, प्रदर्शन और मेमोरी पर नियंत्रण - इसे सिस्टम प्रोग्रामिंग का राजा बनाती हैं। लेकिन इसके लिए कीमत चुकानी पड़ती है: प्रत्येक OS के अपने API, कंपाइलर (MSVC, GCC, Clang) और फ़ाइल सिस्टम विशेषताएँ होती हैं।

\n

मुख्य समस्याएँ:

\n
    \n
  • अलग-अलग हेडर फ़ाइलें — windows.h बनाम unistd.h
  • \n
  • अलग-अलग मैक्रोज़ — _WIN32, __linux__, __APPLE__
  • \n
  • अलग-अलग कंपाइलर — MSVC को GCC एक्सटेंशन पसंद नहीं हैं
  • \n
  • अलग-अलग लाइब्रेरीज़ — डायनामिक लोडिंग (DLL बनाम .so)
  • \n
\n

लेकिन डरो मत — ये सभी समस्याएँ हल करने योग्य हैं। मुख्य बात शुरू से ही सही दृष्टिकोण चुनना है।

\n\n

उपकरण #1: CMake — तुम्हारा सार्वभौमिक बिल्डर

\n

यदि तुम C++ में क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन लिख रहे हो, तो तुम्हारा सबसे अच्छा दोस्त CMake है। यह Make जैसी बिल्ड सिस्टम नहीं है, बल्कि बिल्ड फ़ाइलों का जनरेटर है: यह Linux/macOS के लिए Makefile और Windows के लिए Visual Studio के लिए .sln बनाता है।

\n

यहाँ एक न्यूनतम CMakeLists.txt है जो हर जगह काम करता है:

\n
cmake_minimum_required(VERSION 3.16)\nproject(CrossPlatformApp VERSION 1.0 LANGUAGES CXX)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\n# एक्ज़ीक्यूटेबल फ़ाइल जोड़ें\nadd_executable(myapp main.cpp utils.cpp)\n\n# क्रॉस-प्लेटफ़ॉर्म हैंडलिंग\nif(WIN32)\n    target_compile_definitions(myapp PRIVATE PLATFORM_WINDOWS)\n    target_link_libraries(myapp PRIVATE ws2_32)  # Windows के तहत सॉकेट\nelseif(APPLE)\n    target_compile_definitions(myapp PRIVATE PLATFORM_MACOS)\n    target_link_libraries(myapp PRIVATE "-framework CoreFoundation")\nelse()\n    target_compile_definitions(myapp PRIVATE PLATFORM_LINUX)\nendif()
\n

जैसा कि तुम देख सकते हो, target_compile_definitions प्रत्येक प्लेटफ़ॉर्म के लिए मैक्रोज़ सेट करने की अनुमति देता है। कोड में तुम उनका उपयोग इस प्रकार करते हो:

\n
#ifdef PLATFORM_WINDOWS\n    #include <windows.h>\n    void sleep_ms(int ms) { Sleep(ms); }\n#else\n    #include <unistd.h>\n    void sleep_ms(int ms) { usleep(ms * 1000); }\n#endif
\n

CMake डी-फैक्टो मानक है। यदि तुम्हारा प्रोजेक्ट इसका उपयोग नहीं करता है, तो दृष्टिकोण बदलने का समय आ गया है।

\n\n

Boost और Qt: जटिल कार्यों के लिए तैयार समाधान

\n

सब कुछ शून्य से लिखना नायकों और मसोचिस्टों का काम है। C++ में क्रॉस-प्लेटफ़ॉर्म डेवलपमेंट के लिए परिपक्व लाइब्रेरीज़ मौजूद हैं जो OS के अंतरों को छिपाती हैं।

\n

Boost — स्विस आर्मी चाकू

\n

Boost.Asio — नेटवर्क प्रोग्रामिंग के लिए (Windows और Linux दोनों पर काम करता है)। Boost.Filesystem — फ़ाइलों के साथ काम करने के लिए (यदि तुम्हारे पास पुराना कंपाइलर है तो std::filesystem को बदल देगा)। क्रॉस-प्लेटफ़ॉर्म डायरेक्टरी पढ़ने का उदाहरण:

\n
#include <boost/filesystem.hpp>\nnamespace fs = boost::filesystem;\n\nvoid list_files(const std::string& path) {\n    for (const auto& entry : fs::directory_iterator(path)) {\n        std::cout << entry.path().string() << std::endl;\n    }\n}
\n

यह कोड बिना किसी #ifdef के किसी भी OS पर कंपाइल हो जाएगा।

\n\n

Qt — पूर्ण फ्रेमवर्क

\n

यदि तुम्हें GUI, नेटवर्क, डेटाबेस या मल्टीथ्रेडिंग के साथ काम करने की आवश्यकता है — तो Qt तुम्हारी पसंद है। यह सभी प्लेटफ़ॉर्म के लिए एक समान API प्रदान करता है। जब

ब्लॉग

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