Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

GCC और G++ कंपाइलर्स में क्या अंतर है?


हम अलग-अलग समय पर gcc और g++ कंपाइलर्स का उपयोग करते हैं। यहां हम देखेंगे कि gcc और g++ में क्या अंतर हैं।

gcc GNU C कंपाइलर है, और g++ GNU C++ कंपाइलर है। मुख्य अंतर इस प्रकार हैं:

  • gcc *.c या *.cpp फ़ाइलों को क्रमशः C और C++ के रूप में कंपाइल कर सकता है
  • g++ *.c और *.cpp दोनों फ़ाइलों को कंपाइल कर सकता है, लेकिन दोनों को C++ फ़ाइल के रूप में लेता है
  • यदि हम ऑब्जेक्ट फ़ाइलों को लिंक करने के लिए g++ का उपयोग करना चाहते हैं, तो यह ऑटोमैटिकली स्टैंडर्ड C++ लाइब्रेरीज में लिंक कर देता है। gcc ऐसा नहीं करता
  • gcc C फ़ाइलों को कम प्रीडिफाइंड मैक्रोज़ के साथ कंपाइल करता है
  • gcc C++ फ़ाइलों को अधिक संख्या में प्रीडिफाइंड मैक्रोज़ के साथ कंपाइल करता है, और g++ भी अधिक प्रीडिफाइंड मैक्रोज़ के साथ कंपाइल करता है

C++ फ़ाइलों के लिए अतिरिक्त मैक्रोज़

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

व्यावहारिक अंतर

परिदृश्यgcc file.cppg++ file.cpp
कंपाइलर फ्रंटएंडC++ (फाइल एक्सटेंशन से पता लगाता है)C++ (डिफ़ॉल्ट)
स्टैंडर्ड लाइब्रेरी लिंकिंगनहीं (मैनुअल -lstdc++ आवश्यक)हां (ऑटोमैटिक)
प्रीडिफाइंड मैक्रोज़C++ मैक्रोज़ शामिलC++ मैक्रोज़ शामिल
.c फ़ाइल कंपाइलC मोड मेंC++ मोड में (चेतावनी/त्रुटि संभव)

उदाहरण: gcc से C++ लिंक करना

# C++ कोड के साथ gcc का उपयोग - लिंकर त्रुटि देगा
$ gcc test.cpp
/tmp/ccxxxx.o: undefined reference to `std::cout'

# समाधान: मैनुअल लिंकिंग
$ gcc test.cpp -lstdc++

# या बस g++ का उपयोग करें
$ g++ test.cpp

कब क्या उपयोग करें

  • gcc: शुद्ध C प्रोजेक्ट्स के लिए, या जब मैनुअल लिंकिंग नियंत्रण चाहिए।
  • g++: C++ प्रोजेक्ट्स के लिए (डिफ़ॉल्ट विकल्प)। ऑटोमैटिकली libstdc++ लिंक करता है।
  • क्रॉस-कंपाइलिंग: आर्किटेक्चर-विशिष्ट प्रीफिक्स का उपयोग करें (जैसे arm-linux-gnueabihf-g++)।

सामान्य फ्लैग्स

# चेतावनियां सक्षम करें
g++ -Wall -Wextra -pedantic

# ऑप्टिमाइज़ेशन
g++ -O2 -march=native

# डिबग सिंबल्स
g++ -g

# C++ मानक निर्दिष्ट करें
g++ -std=c++17
g++ -std=c++20

# ऑब्जेक्ट फ़ाइल बनाएं (लिंक न करें)
g++ -c source.cpp -o source.o

नोट: gcc और g++ एक ही कंपाइलर इंफ्रास्ट्रक्चर (GCC) के अलग-अलग फ्रंटएंड्स/ड्राइवर्स हैं। बैकएंड (ऑप्टिमाइज़र, कोड जनरेटर) साझा है।

  1. डायरेक्टएक्स 11 और डायरेक्टएक्स 12 में क्या अंतर है? डायरेक्टएक्स 11 और डायरेक्टएक्स 12 में क्या अंतर है?

    डायरेक्टएक्स एपीआई का एक संग्रह है, या एप्लिकेशन प्रोग्रामिंग इंटरफेस, जिसका उपयोग सॉफ्टवेयर द्वारा मल्टीमीडिया सामग्री को रेंडर करने और ग्राफिकल हार्डवेयर के साथ संचार करने के लिए किया जाता है। डायरेक्टएक्स का प्रमुख घटक एपीआई, डायरेक्ट3डी, सॉफ्टवेयर और ग्राफिक्स हार्डवेयर के बीच संचार को संभालता ह

  1. Android में gravity और layout_gravity का अंतर Android में gravity और layout_gravity का अंतर

    त्वरित सारांश विशेषताgravitylayout_gravity लागू होता हैव्यू के अंदर कंटेंट परव्यू को पेरेंट के अंदर पोजिशन करता है एनालॉजीबॉक्स के अंदर टेक्स्ट संरेखणकंटेनर में बॉक्स की स्थिति पेरेंट आवश्यकताकोई विशेष नहींपेरेंट LinearLayout/FrameLayout होना चाहिए

  1. Android में onCreate() और onStart() में क्या अंतर है Android में onCreate() और onStart() में क्या अंतर है

    परिचयएक्टिविटी जीवनचक्र में `onCreate()` और `onStart()` दो महत्वपूर्ण कॉलबैक हैं, लेकिन उनके उद्देश्य और समय अलग-अलग हैं।मुख्य अंतरपहलूonCreate()onStart()कब कॉल होता हैएक्टिविटी पहली बार बनने परएक्टिविटी उपयोगकर्ता को दिखाई देने वाली होती हैआवृत्तिजीवनचक्र में एक बारहर बार एक्टिविटी फोरग्राउंड में आ