سؤال

ما الفرق بين g++ و gcc؟ما هي العناصر التي يجب استخدامها لتطوير لغة C++ العامة؟

هل كانت مفيدة؟

المحلول

وgcc وg++ هي مترجم السائقين من GNU مترجم <م> أغانى (الذي كان في وقت من الأوقات مجرد GNU <م> C مترجم ).

وعلى الرغم من أنها تحدد تلقائيا التي الخلفيات (cc1 cc1plus ...) لاستدعاء اعتمادا على نوع الملف، إلا إذا تجاوز مع -x language، لديهم بعض الاختلافات.

والفرق وربما الأكثر أهمية في إعداداتها الافتراضية هو الذي المكتبات أنها ترتبط ضد تلقائيا.

ووفقا للوثائق على الانترنت خيارات الارتباط و <لأ href = "https://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html" يختلط = "noreferrer"> كيف ز ++ يتم استدعاء ، g++ ما يعادل gcc -xc++ -lstdc++ -shared-libgcc (في 1 هو خيار مترجم، و 2ND هما خيارات رابط). يمكن التحقق من ذلك عن طريق تشغيل مع كل من الخيار -v (فإنه يعرض على المدى الأوامر الخلفية toolchain الراهن).

نصائح أخرى

مجلس التعاون الخليجي:مجموعة مترجم جنو

  • تشير إلى جميع اللغات المختلفة التي يدعمها مترجم جنو.

مجلس التعاون الخليجي:مترجم GNU C     
ز++:مترجم جنو C++

الاختلافات الرئيسية:

  1. سوف يقوم مجلس التعاون الخليجي بتجميع:ملفات *.c/*.cpp بتنسيق C وC++ على التوالي.
  2. سوف يقوم g++ بتجميع:ملفات *.c/*.cpp ولكن سيتم التعامل معها جميعًا كملفات C++.
  3. وأيضًا إذا كنت تستخدم g++ لربط ملفات الكائنات، فسيتم ربطها تلقائيًا في مكتبات std C++ (لا تقوم gcc بذلك).
  4. تحتوي ملفات C المترجمة في دول مجلس التعاون الخليجي على عدد أقل من وحدات الماكرو المحددة مسبقًا.
  5. تجميع ملفات gcc *.cpp وg++ تجميع ملفات *.c/*.cpp يحتوي على عدد قليل من وحدات الماكرو الإضافية.

وحدات ماكرو إضافية عند تجميع ملفات *.cpp:

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

لج ++ يجب عليك استخدام ز ++.

وانها نفس مترجم (مثل جمع مترجم GNU). دول مجلس التعاون الخليجي أو G ++ مجرد اختيار مختلفة الأمامية مع خيارات افتراضية مختلفة.

في وباختصار يمكن القول: إذا كنت تستخدم ز ++ الواجهة الأمامية سوف اقول رابط التي قد تحتاج إلى ربط مع المكتبات القياسية C ++. فإن الواجهة دول مجلس التعاون الخليجي لا تفعل ذلك (أيضا يمكن أن تصل معهم إذا كنت تمر الصحيحة خيارات سطر الأوامر).

ماهو الفرق بين g++ و gcc?

gcc تطورت من لغة واحدة "مترجم GNU C" لتصبح "مجموعة مترجم GNU" متعددة اللغات.لا يزال مصطلح "مترجم GNU C" يستخدم أحيانًا في سياق برمجة C.

ال g++ يكون مترجم C++ لمجموعة مترجمات GNU.يحب gnat هو مترجم Ada ل gcc. راجع استخدام مجموعة مترجمات GNU (GCC)

على سبيل المثال، أوبونتو 16.04 و18.04 man g++ يقوم الأمر بإرجاع GCC(1) صفحة يدوية.

أوبونتو 16.04 و 18.04 man gcc ينص علي ...

g++ يقبل في الغالب نفس الخيارات مثل gcc

وأن الافتراضي...

...استخدام gcc لا يضيف مكتبة C++. g++ هو برنامج يدعو GCC ويحدد تلقائيًا الارتباط مع مكتبة C ++.يعامل ملفات .C و .h و .i كملفات مصدر C ++ بدلاً من ملفات مصدر C ما لم يتم استخدام -X.يعد هذا البرنامج مفيدًا أيضًا عند تجميع ملف رأس C بامتداد .H للاستخدام في مجموعات C ++.

ابحث في gcc صفحات الدليل للحصول على تفاصيل الأعراف حول تباينات الخيار gcc و g++.

أيهما يجب استخدامه لتطوير لغة C++ العامة؟

من الناحية الفنية، سواء gcc أو g++ يمكن استخدامه للتطوير العام لـ C++ مع إعدادات الخيارات القابلة للتطبيق.ومع ذلك، g++ يتماشى السلوك الافتراضي بشكل طبيعي مع تطوير C++.

أضافت صفحة دليل Ubuntu 18.04 الفقرة التالية:

الطريقة المعتادة لتشغيل دول مجلس التعاون الخليجي هي تشغيل الملف القابل للتنفيذ الذي يسمى gcc, ، أو machine-gcc عند التجميع المتقاطع، أو machine-gcc-version لتشغيل نسخة محددة من دول مجلس التعاون الخليجي. عند تجميع برامج C++، يجب عليك استدعاء مجلس التعاون الخليجي باسم g++ بدلاً من.

والفرق الوحيد الملحوظ هو أنه إذا قمت بتمرير .c لدول مجلس التعاون الخليجي سيكون تجميع كما C، في حين ز ++ سوف نتعامل دائما بأنها C ++.

وعلى الرغم من أن دول مجلس التعاون الخليجي وز ++ الأوامر تفعل أشياء متشابهة جدا، ز ++ تم تصميمه ليكون الأمر كنت استدعاء ترجمة برنامج C ++؛ والمقصود أن تفعل تلقائيا الشيء الصحيح.

وراء الكواليس، وانهم في الحقيقة نفس البرنامج. كما أفهم، سواء تقرر ما إذا كانت ترجمة برنامج كما C أو C ++ استنادا إلى ملحق اسم الملف. كلاهما قادر على ربط ضد مكتبة القياسية C ++، ولكن فقط ز ++ يفعل ذلك بشكل افتراضي. حتى إذا كان لديك برنامج مكتوب في C ++ هذا لا يحدث في حاجة لربط ضد مكتبة القياسية، ودول مجلس التعاون الخليجي يحدث لفعل الشيء الصحيح. ولكن بعد ذلك، حتى لو ز ++. لذلك هناك حقا أي سبب لعدم استخدام ز ++ C للعام ++ التنمية.

لقد أصبحت مهتمًا بالموضوع وقمت بإجراء بعض التجارب

  1. لقد وجدت هذا الوصف هنا, ، ولكنها قصيرة جداً.

  2. ثم حاولت تجربة gcc.exe وg++.exe على جهازي الذي يعمل بنظام Windows:

    $ g++ --version | head -n1 
    g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
    $ gcc --version | head -n1
    gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
  3. لقد حاولت تجميع ملفات اختبار بسيطة لـ c89 وc99 وc++1998 وهي تعمل بشكل جيد بالنسبة لي مع الامتدادات الصحيحة المطابقة للغة

    gcc -std=c99 test_c99.c
    gcc -std=c89 test_c89.c 
    g++ -std=c++98 test_cpp.cpp
    gcc -std=c++98 test_cpp.cpp
    
  4. ولكن عندما أحاول تشغيل أداة "gnu Compiler Collection" بهذه الطريقة:

    $ gcc -std=c++98 test_cpp.c
    cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
    
  5. ولكن هذا لا يزال يعمل مع عدم وجود أخطاء

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. وهذا أيضا

    $ g++ -std=c++0x test_cpp_11.cpp 
    

ملاحظة.ملفات الاختبار

$ cat test_c89.c test_c99.c test_cpp.cpp

// C89 compatible file
int main()
{
    int x[] = {0, 2};
    return sizeof(x);
}

// C99 compatible file
int main()
{
    int x[] = {[1]=2};
    return sizeof(x);
}

// C++1998,2003 compatible file
class X{};
int main()
{
    X x;
    return sizeof(x);
}

// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
    std::vector<int> a {1,2,3}; // bracket initialization
    return 0;
}

الموجودات:

  1. إذا نظرت إلى شجرة العملية، فيبدو أن gcc وg++ هما الواجهة الخلفية لأدوات أخرى، وهي في بيئتي: cc1plus.exe، cc1.exe، Collect2.exe، as.exe، ld.exe

  2. تعمل GCC بشكل جيد مثل Metatool إذا كان لديك تمديد صحيح أو تعيين أعلام -S -STD الصحيح.يرى هذا

"GCC" هو مصطلح مختصر شائع لمجموعة مترجمات GNU.هذا هو الاسم الأكثر عمومية للمترجم، والاسم المستخدم عندما يكون التركيز على ترجمة برامج C (كما كان الاختصار سابقًا يعني "GNU C Compiler").

عند الإشارة إلى تجميع C++، من المعتاد استدعاء المترجم "G++".نظرًا لوجود مترجم واحد فقط، فمن الصحيح أيضًا تسميته "GCC" بغض النظر عن سياق اللغة؛ومع ذلك، فإن المصطلح "G++" يكون أكثر فائدة عندما يكون التركيز على تجميع برامج C++.

يمكنك قراءة المزيد هنا.

كنت أختبر دول مجلس التعاون الخليجي وg++ في نظام لينكس.باستخدام MAKEFILE، يمكنني تحديد المترجم الذي يستخدمه "GNU make".لقد اختبرت باستخدام ما يسمى بميزة تحديد موقع "الذاكرة الديناميكية" لـ "C plus plus" بواسطة:

int main(){

int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}

يمكن فقط لـ g++ التجميع بنجاح على جهاز الكمبيوتر الخاص بي بينما سيقوم gcc بالإبلاغ عن الخطأ

undefined reference to `operator new(unsigned long)'

لذا فإن استنتاجي الخاص هو أن دول مجلس التعاون الخليجي لا تدعم بشكل كامل "C plus plus". يبدو أن اختيار g++ لملفات مصدر C++ يعد خيارًا أفضل.

ودول مجلس التعاون الخليجي وز ++ كلاهما مترجم GNU. كلاهما تجميع C و C ++. والفرق هو ل* .C ملفات يعامل دول مجلس التعاون الخليجي على أنها برنامج ج، ز ++ تعتبره برنامج ج ++. تعتبر * ملفات .CPP أن تكون ج ++ البرامج. ج ++ هو مجموعة سوبر ج وبناء الجملة هي أكثر صرامة، لذا كن حذرا حول لاحقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top