GCC (GNU Compiler Collection) هو برنامج سطر أوامر مفتوح المصدر مصمم ليكون بمثابة مترجم لأنظمة التشغيل GNU / Linux و BSD. ويتضمن ذلك نهايات أمامية للعديد من لغات البرمجة ، بما في ذلك Objective-C و Go و C ++ و Java و C و Ada و Fortran.
الميزات في لمحة
باستخدام GCC ، يمكنك تكوين وتجميع وتثبيت تطبيقات جنو / لينكس في أنظمة التشغيل Linux أو BSD باستخدام أرشيف المصدر فقط للبرنامج المعني. ومع ذلك ، لا يحتاج المستخدمون إلى التفاعل مع المحول البرمجي ، حيث يتم ذلك تلقائيًا عن طريق التهيئة ووضع النصوص.
يشتمل المشروع أيضًا على مكتبات لمختلف لغات البرمجة ، مثل libstdc و libgcj ، ومثل معظم برامج جنو ، يجب تهيئتها قبل أن يتم بناؤها وتثبيتها على جهاز الكمبيوتر الخاص بك.
ويمكن أيضًا عرض المسار الكامل لمكتبة معينة ، ومجلدات في مسار البحث الخاص بالمترجم ، ومسار كامل إلى مكون معين ، ودليل مكتبات الهدف ، ولاحقة النظام الفرعي المستخدمة في البحث عن الرؤوس ، وثلاثي جنو المعتاد للهدف المستهدف.
بالإضافة إلى ذلك ، هناك العديد من الخيارات الأخرى لتمرير بعض الخيارات والوسائط المفصولة بفواصل إلى المجمّع والمعالج المسبق والرابط وتجميعها وتجميعها بدون الربط وإنشاء مكتبة مشتركة والعديد غيرها.
مصممة لنظام التشغيل جنو
كونه مكتوبًا في الأصل كمجموع رئيسي لنظام التشغيل GNU ، تم تطوير GCC (GNU Compiler Collection) ليكون برنامجًا مجانيًا بنسبة 100٪ ويتم تثبيته افتراضيًا على أي توزيعة Linux.
يتم أيضًا استخدام البرنامج بواسطة مطوري البرامج مفتوحة المصدر لتجميع برامجهم. يأتي سطر الأوامر مع العديد من الخيارات ، من بينها يمكننا ذكر القدرة على عرض المعالج المستهدف للملجم ، بالإضافة إلى المسار النسبي لمكتبات نظام التشغيل.
الحد الأدنى
الكل في الكل ، يعد GCC واحدًا من أهم مكونات نظام التشغيل GNU / Linux. ليس فقط أننا لا نستطيع حتى تخيل عالم بدونه ، ولكن دول مجلس التعاون الخليجي هي السبب الرئيسي وراء النظام البيئي المفتوح المصدر بأكمله.
ما هو الجديد في هذا الإصدار:
يعتبر GCC 7.3 إصداراً من الأخطاء في فرع 7 في دول مجلس التعاون الخليجي يحتوي على إصلاحات هامة للانحدار والحشرات الخطيرة في دول مجلس التعاون الخليجي 7.2 مع وجود أكثر من 99 بقة ثابتة منذ الإصدار السابق.
يتضمن هذا الإصدار خيارات إنشاء الكودات لتخفيف Spectre Variant 2 (CVE 2017-5715) للأهداف x86 و powerpc.
ما هو الجديد في الإصدار 8.1.0:
دول مجلس التعاون الخليجي 7.3 عبارة عن إصدار إصلاح خلل من فرع دول مجلس التعاون الخليجي 7 يحتوي على إصلاحات هامة للانحدار والبق خطيرة في دول مجلس التعاون الخليجي 7.2 مع أكثر من 99 البق الثابتة منذ الإصدار السابق.
يتضمن هذا الإصدار خيارات إنشاء الكودات لتخفيف Spectre Variant 2 (CVE 2017-5715) للأهداف x86 و powerpc.
ما هو الجديد في الإصدار:
الإصدار 7.1 من GCC هو الإصدار الرئيسي الذي يحتوي على وظائف جديدة كبيرة غير متوفرة في دول مجلس التعاون الخليجي 6.x أو الإصدارات السابقة لمجلس التعاون الخليجي. لدى الواجهة الأمامية لـ C ++ الآن دعمًا تجريبيًا لكل مسودة C ++ 17 الحالية ، مع خيارات -std = c ++ 1z و -std = gnu ++ 1z ، وتحتوي مكتبة libstdc ++ على معظم مسودة C ++ 17 ميزات المكتبة تنفيذها أيضا. يحتوي هذا الإصدار على تحسينات متنوعة في التشخيصات المنبعثة ، بما في ذلك المواقع المحسنة ، ونطاقات الموقع ، والاقتراحات الخاصة بالمعرفات التي تحتوي على أخطاء إملائية ، وأسماء الخيارات ، وتلميحات الإصلاح ، بالإضافة إلى العديد من التحذيرات الجديدة التي تمت إضافتها. تم تحسين أدوات التحسين ، مع ظهور تحسينات في جميع التحسينات الداخلية والإجراءات ، وتحسينات وقت الربط ومختلف الخلفيات المستهدفة ، بما في ذلك ، على سبيل المثال لا الحصر ، إضافات ممر دمج المخزن ، تحسين رفع الكود ، تقسيم الحلقة ، والتقلص تحسينات التفاف. يستطيع مطهر العنوان الآن الإبلاغ عن استخدام المتغيرات بعد ترك نطاقها. يمكن تهيئة دول مجلس التعاون الخليجي الآن لتحميل OpenMP 4.5 لتفريغ GPGPUs من NVidia PTX.
الجديد في الإصدار 6.3.0:
الإصدار 6.3 من GCC هو إصدار جديد من فرع 6 في دول مجلس التعاون الخليجي يحتوي على إصلاحات هامة للانحدار والبق الخطير في GCC 6.2 مع أكثر من 79 بقة ثابتة منذ الإصدار السابق.
الجديد في الإصدار 6.2.0:
هذا الإصدار هو إصدار من الأخطاء ، يحتوي على إصلاحات لانحدار في دول مجلس التعاون الخليجي 5.2 مقارنة بالإصدارات السابقة من دول مجلس التعاون الخليجي.
الجديد في الإصدار 6.1.0:
هذا الإصدار هو إصدار من الأخطاء ، يحتوي على إصلاحات لانحدار في دول مجلس التعاون الخليجي 5.2 مقارنة بالإصدارات السابقة من دول مجلس التعاون الخليجي.
الجديد في الإصدار 5.3.0:
هذا الإصدار هو إصدار من الأخطاء ، يحتوي على إصلاحات لانحدار في دول مجلس التعاون الخليجي 5.2 مقارنة بالإصدارات السابقة من دول مجلس التعاون الخليجي.
ما هو الجديد في الإصدار 5.2.0:
هذا الإصدار هو إصدار من الأخطاء ، يحتوي على إصلاحات لانحدار في دول مجلس التعاون الخليجي 5.1 مقارنة بالإصدارات السابقة من دول مجلس التعاون الخليجي.
الجديد في الإصدار 5.1.0:
لدى الواجهة الأمامية C ++ الآن دعم لغة C ++ 14 كامل و C ++ مكتبة Standard له الدعم الكامل C ++ 11 والدعم التجريبي كامل C ++ 14. لقد أصبح الدعم الكامل لـ C ++ 11 ممكناً من خلال اعتماد Dual ABI ، راجع https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html لمزيد من التفاصيل.يتم الآن تعيين الواجهة الأمامية C إلى الوضع C11 مع ملحقات GNU ، والتي تؤثر على دلالات الكلمة الرئيسية المضمنة وتجلب العديد من التغييرات الأخرى المرئية للمستخدم ، راجع https://gcc.gnu.org/gcc-5/porting_to.html لمزيد من التفاصيل .
يحتوي الإصدار 5.1 من GCC على العديد من التحسينات التحسينية فيما بين العمليات ، على سبيل المثال ، تمريرة تجريبية جديدة متوافقة مع رمز IPA ومعدلات LTO المتنوعة ، على سبيل المثال ، دمج ODR لأنواع C ++ ، راجع http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html لمزيد من التفاصيل.
يحتوي تخصيص السجل المحلي 5.1 التابع لمجلس التعاون الخليجي الآن على نقطة فرعية لإعادة الصياغة ، على i 86 / 86-64 قادر على إعادة استخدام السجل الثابت للموافقة المسبقة عن علم لتحسين أداء الكود المستقل للموضع ، وهناك تمريرة RA بسيطة متعددة العمليات والعديد من تحسينات تخصيص السجل الأخرى وأضاف.
تضيف دول مجلس التعاون الخليجي 5.1 دعمًا جزئيًا لمعيار OpenACC ، ودعم إلغاء OpenMP 4.0 إلى مسرعات Xeon Phi القادمة من إنتل ودعم عمليات إلغاء OpenACC إلى PTX. لقد تم تمديد نظام التعريف غير المحدد للسلوك في دول مجلس التعاون الخليجي بإضافة العديد من عمليات الفحص الجديدة. تمت إضافة مكتبة JIT تجريبية في دول مجلس التعاون الخليجي 5.1 في دول مجلس التعاون الخليجي.
الجديد في الإصدار 4.8.4:
تحسينات للمحسن العام:AddressSanitizer ، كاشف أخطاء الذاكرة السريعة ، متاح الآن على ARM.
تم إضافة UndefinedBehaviorSanitizer (ubsan) ، وهو كاشف سلوك غير محدد سريع ، ويمكن تمكينه عبر -fsanitize = غير محدد. سيتم إجراء حسابات مختلفة للكشف عن سلوك غير محدد في وقت التشغيل. UndefinedBehaviorSanitizer متاح حاليًا للغات C و C ++.
تحسينات تحسين وقت الربط (LTO):
تمت كتابة نوع الدمج. التطبيق الجديد أسرع بشكل ملحوظ ويستخدم ذاكرة أقل.
خوارزمية تجزيئية أفضل تؤدي إلى تقليل التدفق أثناء وقت الربط.
تؤدي عملية الإزالة المبكرة للأساليب الظاهرية إلى تقليل حجم ملفات الكائن وتحسين استخدام الذاكرة في وقت الارتباط ووقت التحويل البرمجي.
يتم الآن تحميل الهيئات الوظيفية عند الطلب ويتم تحريرها مبكرًا لتحسين استخدام الذاكرة الكلية في وقت الارتباط.
يمكن الآن تحسين أساليب C4 المخفية المخفية.عند استخدام مكون رابط ، يعمل التحويل البرمجي مع خيار -flto الآن على إنشاء ملفات كائن نحيلة (.o) تحتوي فقط على تمثيل اللغة المتوسطة لـ LTO. استخدم -ffat-lto-objects لإنشاء ملفات تحتوي على رمز الكائن بالإضافة إلى ذلك. لتوليد مكتبات ثابتة مناسبة لتجهيز LTO ، استخدم gcc-ar و gcc-ranlib؛ لسرد الرموز من ملف كائن رفيع استخدم gcc-nm. (يتطلب هذا أن ar و ranlib و nm قد تم تجميعها مع دعم المكون الإضافي.)
تم تقليل بناء استخدام الذاكرة Firefox مع تمكين التصحيح من 15 غيغابايت إلى 3.5 غيغابايت ؛ وقت الرابط من 1700 ثانية إلى 350 ثانية.
تحسينات التحسينات الداخلية الإجرائية:
نوع جديد من وحدة تحليل الوراثة تحسين devirtualization. تأخذ ميزة التطوير الافتراضية الآن في الاعتبار مساحات الأسماء المجهولة وكلمة C ++ 11 النهائية.
تمرير devirtualization المضاربة الجديدة (التي تسيطر عليها -fdevirtualize- speculatively.
يتم إرجاع المكالمات التي تم إجراؤها على نحو مغربي بشكل مباشر إلى غير مباشر حيث أن المكالمة المباشرة ليست أرخص.
يتم تقديم الأسماء المستعارة المحلية للرموز المعروفة بأنها مكافئة دلالة عبر المكتبات المشتركة لتحسين أوقات الربط الديناميكي.
ردود الفعل توجيه التحسينات التحسين:أصبح التعرف على البرامج باستخدام وظائف مضمنة C ++ الآن أكثر موثوقية.
يحدد التنميط في الوقت الجديد ترتيبًا نموذجيًا يتم فيه تنفيذ الوظائف.
تعمل وظيفة إعادة ترتيب وظيفة جديدة (يتم التحكم فيها بواسطة وظائف -freorder-function) بشكل كبير على تقليل وقت بدء التطبيقات الكبيرة. حتى يتم استكمال دعم binutils ، يكون فعالاً فقط مع تحسين وقت الربط.
تتعامل الآن التعليقات التي يتم إجراؤها مع إزالة المكالمات غير المباشرة وإلغاء التمثيل الافتراضي مع مكالمات الوحدة النمطية المشتركة عند تمكين تحسين وقت الربط.
تحسينات جديدة للغة ولغة محددة:
يتم دعم الإصدار 4.0 من مواصفات OpenMP الآن في compilers C و C ++ وبدءًا من الإصدار 4.9.1 أيضًا في برنامج Fortran compiler. يمكن استخدام الخيار -fopenmp-simd الجديد لتمكين توجيهات OpenMP's SIMD ، بينما يتجاهل توجيهات OpenMP الأخرى. يسمح نموذج -fsimd-cost-model = new بتوليف نموذج تكلفة المتجه للحلقات الموضحة بتوجيهات OpenMP و Cilk Plus simd؛ -Wopenmp-simd يحذر عندما يتجاوز نموذج التكلفة الحالية توجيهات simd المحددة من قبل المستخدم.تمت إضافة خيار -Wdate-time لـ compilers C و C ++ و Fortran ، والذي يحذر عند استخدام وحدات الماكرو __DATE__ ، __TIME__ أو __TIMESTAMP__. قد تمنع تلك وحدات الماكرو تجميعات نسخاً متماثلة bit-wise-replicative reproducible compilations.
آدا:
تحول GNAT إلى Ada 2012 بدلاً من Ada 2005 افتراضيًا.
عائلة C:
تمت إضافة دعم لتلوين التشخيصات المنبعثة من دول مجلس التعاون الخليجي. و -fdiagnostics- لون = السيارات سوف تمكينها عند إخراجها إلى المحطات ، -fdiagnostics- لون = دائما دون قيد أو شرط. يمكن استخدام متغير البيئة GCC_COLORS لتخصيص الألوان أو تعطيل التلوين. إذا كان متغير GCC_COLORS موجودًا في البيئة ، يكون الإعداد الافتراضي هو -fdiagnostics-color = auto ، وإلا -fdiagnostics-color = never.
عينة من مخرجات التشخيص:
$ g ++ -fdiagnostics-color = always -S -Wall test.C
test.C: In function & lsquo؛ int foo () ':
test.C: 1: 14: تحذير: لا عودة البيان في وظيفة العودة غير باطلة [-كتاب من نوع]
int foo () {}
test.C: 2: 46: الخطأ: عمق تجليد قالب يتجاوز الحد الأقصى 900 (الاستخدام - العمق - = = لزيادة الحد الأقصى) instantiating & lsquo؛ struct X '
بنية القالب X {static const int value = X :: value؛ }؛ بنية القالب X ؛test.C: 2: 46: متكرر مطلوب من & lsquo؛ const int X :: value '
test.C: 2: 46: required from & lsquo؛ const int X :: value '
test.C: 2: 88: مطلوب من هنا
test.C: 2: 46: error: type غير كامل & lsquo؛ X 'يستخدم في محدد الاسم المتداخل
مع #pragma GCC ivdep الجديد ، يمكن للمستخدم التأكيد على أنه لا توجد تبعيات محملة بالدوائر التي من شأنها أن تمنع التنفيذ المتزامن للتكرار المتتابع باستخدام تعليمات SIMD (توجيه مفرد بيانات متعددة).
تمت إضافة دعم Cilk Plus ويمكن تمكينه مع خيار -fcilkplus. Cilk Plus هو امتداد للغات C و C ++ لدعم البيانات والتوازي في المهام. يأتي التنفيذ الحالي في أعقاب الإصدار 1.2 من ABI. جميع الميزات ولكن تم تطبيق _Cilk_for.
يتم الآن اعتماد ISO C11 atomics (محدد النوع والموصف الصوتي والرمز).
يتم دعم الاختيارات العامة ISO C11 (_Generic keyword).
يتم دعم التخزين المحلي لموضوع ISO C11 (_Thread_local ، على غرار GNU C __thread).إن دعم ISO C11 الآن في مستوى مماثل من دعم ISO C99: حشرات معدلة بشكل كامل ، ومعرفات موسعة (مدعومة باستثناء حالات الزاوية عند استخدام المعرفات -fextended) ، وقضايا النقطة العائمة (بشكل رئيسي ولكن ليس متعلقًا كليًا بالاختياري خصائص C99 من الملحقين F و G) ومرفقات K الاختيارية (واجهات التحقق Bounds) و L (تحليل).
يوفر ملحق C الجديد __auto_type مجموعة فرعية من وظائف C ++ 11 auto في GNU C.
C ++:
تم تحديث تنفيذ G ++ من 1 + 1 من نوع الاسترجاع للوظائف العادية لتتوافق مع N3638 ، تم قبول الاقتراح في ورقة العمل. الأبرز ، أنه يضيف decltype (تلقائي) للحصول على دلالات descentpepe بدلا من دلالات خصم حجة القالب من السيارات العادية:
الباحث اند F()؛
auto i1 = f ()؛ // int
decltype (auto) i2 = f ()؛ // int & amp؛
G ++ يدعم C ++ 1y lambda catch initializers:
[س = 42] {...} ؛
في الواقع ، لقد تم قبولهم منذ 4.5 دول مجلس التعاون الخليجي ، ولكن الآن لا يحذر المترجم عنهم مع -std = c ++ 1y ، ويدعم المبدئ بين قوسين ومبسطين.
تدعم G ++ مصفوفات متغيرة الطول C ++ 1y. وقد دعمت G ++ VLAs على جنو / C99 لفترة طويلة ، ولكن الآن تدعم بالإضافة إلى ذلك المبتدئين والتقاط lambda حسب المرجع. في الوضع C + 1Y ستشكو G ++ من استخدامات VLA غير المسموح بها في مسودة المعيار ، مثل تشكيل مؤشر لنوع VLA أو تطبيق sizeof لمتغير VLA. لاحظ أنه يبدو الآن أن VLAs لن تكون جزءًا من C ++ 14 ، ولكنها ستكون جزءًا من وثيقة منفصلة ومن ثم C ++ 17.
void f (int n) {
int a [n] = {1، 2، 3}؛ // throws std :: bad_array_length if n & lt؛ 3
[& amp؛ a] {for (int i: a) {cout
ما هو الجديد في الإصدار 4.9.1:
GCC 4.9.1 هو برنامج إصلاح خلل من فرع دول مجلس التعاون الخليجي 4.9 يحتوي على إصلاحات هامة للانحدار والبق الخطير في دول مجلس التعاون الخليجي 4.9.0 مع أكثر من 88 بقة ثابتة منذ الإصدار السابق. بالإضافة إلى ذلك ، فإن الإصدار 4.7.1 من GCC يدعم OpenMP 4.0 أيضًا في Fortran ، وليس فقط في C و C ++.
ما هو الجديد في الإصدار 4.9.0:
تحسينات للمحسن العام:AddressSanitizer ، كاشف أخطاء الذاكرة السريعة ، متاح الآن على ARM.
تم إضافة UndefinedBehaviorSanitizer (ubsan) ، وهو كاشف سلوك غير محدد سريع ، ويمكن تمكينه عبر -fsanitize = غير محدد. سيتم إجراء حسابات مختلفة للكشف عن سلوك غير محدد في وقت التشغيل. UndefinedBehaviorSanitizer متاح حاليًا للغات C و C ++.
تحسينات تحسين وقت الربط (LTO):
تمت كتابة نوع الدمج. التطبيق الجديد أسرع بشكل ملحوظ ويستخدم ذاكرة أقل.
خوارزمية تجزيئية أفضل تؤدي إلى تقليل التدفق أثناء وقت الربط.
تؤدي عملية الإزالة المبكرة للأساليب الظاهرية إلى تقليل حجم ملفات الكائن وتحسين استخدام الذاكرة في وقت الارتباط ووقت التحويل البرمجي.
يتم الآن تحميل الهيئات الوظيفية عند الطلب ويتم تحريرها مبكرًا لتحسين استخدام الذاكرة الكلية في وقت الارتباط.
يمكن الآن تحسين أساليب C4 المخفية المخفية.عند استخدام مكون رابط ، يعمل التحويل البرمجي مع الخيار -flto الآن على إنشاء ملفات الكائنات النحيلة (.o) التي تحتوي فقط على تمثيل اللغة المتوسطة لـ LTO. استخدم -ffat-lto-objects لإنشاء ملفات تحتوي على رمز الكائن بالإضافة إلى ذلك. لتوليد مكتبات ثابتة مناسبة لتجهيز LTO ، استخدم gcc-ar و gcc-ranlib؛ لسرد الرموز من ملف كائن رفيع استخدم gcc-nm. (يتطلب ذلك أن يتم تجميع ar و ranlib و nm مع دعم المكون الإضافي.)
تم تقليل بناء استخدام الذاكرة Firefox مع تمكين التصحيح من 15 غيغابايت إلى 3.5 غيغابايت ؛ وقت الرابط من 1700 ثانية إلى 350 ثانية.
تحسينات التحسينات الداخلية الإجرائية:
نوع جديد من وحدة تحليل الوراثة تحسين devirtualization. تأخذ ميزة التطوير الافتراضية الآن في الاعتبار مساحات الأسماء المجهولة وكلمة C ++ 11 النهائية.
تمرير devirtualization المضاربة الجديدة (التي تسيطر عليها -fdevirtualize- speculatively.
يتم إرجاع المكالمات التي تم إجراؤها على نحو مغربي بشكل مباشر إلى غير مباشر حيث أن المكالمة المباشرة ليست أرخص.
يتم تقديم الأسماء المستعارة المحلية للرموز المعروفة بأنها مكافئة دلالة عبر المكتبات المشتركة لتحسين أوقات الربط الديناميكي.
ردود الفعل توجيه التحسينات التحسين:أصبح التعرف على البرامج باستخدام وظائف مضمنة C ++ الآن أكثر موثوقية.
يحدد التنميط في الوقت الجديد ترتيبًا نموذجيًا يتم فيه تنفيذ الوظائف.
تعمل وظيفة إعادة ترتيب وظيفة جديدة (يتم التحكم فيها بواسطة وظائف -freorder-function) بشكل كبير على تقليل وقت بدء التطبيقات الكبيرة. حتى يتم استكمال دعم binutils ، يكون فعالاً فقط مع تحسين وقت الربط.
تتعامل الآن التعليقات التي يتم إجراؤها مع إزالة المكالمات غير المباشرة وإلغاء التمثيل الافتراضي مع مكالمات الوحدة النمطية المشتركة عند تمكين تحسين وقت الربط.
تحسينات جديدة للغة ولغة محددة:
الإصدار 4.0 من مواصفات OpenMP مدعوم الآن للمترجمين C و C ++. يمكن استخدام الخيار -fopenmp-simd الجديد لتمكين توجيهات OpenMP's SIMD ، بينما يتجاهل توجيهات OpenMP الأخرى. يسمح نموذج -fsimd-cost-model = new بتوليف نموذج تكلفة المتجه للحلقات الموضحة بتوجيهات OpenMP و Cilk Plus simd؛ -Wopenmp-simd يحذر عندما يتجاوز costmodel الحالي توجيهات simd المحددة من قبل المستخدم.
تمت إضافة خيار -Wdate-time لـ compilers C و C ++ و Fortran ، والذي يحذر عند استخدام وحدات الماكرو __DATE__ ، __TIME__ أو __TIMESTAMP__. قد تمنع تلك وحدات الماكرو تجميعات نسخاً متماثلة bit-wise-replicative reproducible compilations.آدا:
تحول GNAT إلى Ada 2012 بدلاً من Ada 2005 افتراضيًا.
عائلة C:
تمت إضافة دعم لتلوين التشخيصات المنبعثة من دول مجلس التعاون الخليجي. و -fdiagnostics- لون = السيارات سوف تمكينها عند إخراجها إلى المحطات ، -fdiagnostics- لون = دائما دون قيد أو شرط. يمكن استخدام متغير البيئة GCC_COLORS لتخصيص الألوان أو تعطيل التلوين. إذا كان متغير GCC_COLORS موجودًا في البيئة ، يكون الإعداد الافتراضي هو -fdiagnostics-color = auto ، وإلا -fdiagnostics-color = never.
عينة من مخرجات التشخيص:
$ g ++ -fdiagnostics-color = always -S -Wall test.C
test.C: In function & lsquo؛ int foo () ':
test.C: 1: 14: تحذير: لا عودة البيان في وظيفة العودة غير باطلة [-كتاب من نوع]
int foo () {}
test.C: 2: 46: الخطأ: عمق تجليد قالب يتجاوز الحد الأقصى 900 (الاستخدام - العمق - = = لزيادة الحد الأقصى) instantiating & lsquo؛ struct X '
بنية القالب X {static const int value = X :: value؛ }؛ بنية القالب X ؛
test.C: 2: 46: متكرر مطلوب من & lsquo؛ const int X :: value '
test.C: 2: 46: required from & lsquo؛ const int X :: value '
test.C: 2: 88: مطلوب من هناtest.C: 2: 46: error: type غير كامل & lsquo؛ X 'يستخدم في محدد الاسم المتداخل
مع #pragma GCC ivdep الجديد ، يمكن للمستخدم التأكيد على أنه لا توجد تبعيات محملة بالدوائر التي من شأنها أن تمنع التنفيذ المتزامن للتكرار المتتابع باستخدام تعليمات SIMD (توجيه مفرد بيانات متعددة).
تمت إضافة دعم Cilk Plus ويمكن تمكينه مع خيار -fcilkplus. Cilk Plus هو امتداد للغات C و C ++ لدعم البيانات والتوازي في المهام. يأتي التنفيذ الحالي في أعقاب الإصدار 1.2 من ABI. جميع الميزات ولكن تم تطبيق _Cilk_for.
يتم الآن اعتماد ISO C11 atomics (محدد النوع والموصف الصوتي والرمز).
يتم دعم الاختيارات العامة ISO C11 (_Generic keyword).
يتم دعم التخزين المحلي لموضوع ISO C11 (_Thread_local ، على غرار GNU C __thread).إن دعم ISO C11 الآن في مستوى مماثل من دعم ISO C99: حشرات معدلة بشكل كامل ، ومعرفات موسعة (مدعومة باستثناء حالات الزاوية عند استخدام المعرفات -fextended) ، وقضايا النقطة العائمة (بشكل رئيسي ولكن ليس متعلقًا كليًا بالاختياري خصائص C99 من الملحقين F و G) ومرفقات K الاختيارية (واجهات التحقق Bounds) و L (تحليل).
يوفر ملحق C الجديد __auto_type مجموعة فرعية من وظائف C ++ 11 auto في GNU C.
C ++:
تم تحديث تنفيذ G ++ من 1 + 1 من نوع الاسترجاع للوظائف العادية لتتوافق مع N3638 ، تم قبول الاقتراح في ورقة العمل. الأبرز ، أنه يضيف decltype (تلقائي) للحصول على دلالات descentpepe بدلا من دلالات خصم حجة القالب من السيارات العادية:
الباحث اند F()؛
auto i1 = f ()؛ // int
decltype (auto) i2 = f ()؛ // int & amp؛
G ++ يدعم C ++ 1y lambda catch initializers:
[س = 42] {...} ؛
في الواقع ، لقد تم قبولهم منذ 4.5 دول مجلس التعاون الخليجي ، ولكن الآن لا يحذر المترجم عنهم مع -std = c ++ 1y ، ويدعم المبدئ بين قوسين ومبسطين.يدعم G ++ مصفوفات متغيرة الطول C ++ 1y. وقد دعمت G ++ VLAs على جنو / C99 لفترة طويلة ، ولكن الآن تدعم بالإضافة إلى ذلك المبتدئين والتقاط lambda حسب المرجع. في الوضع C + 1Y ستشكو G ++ من استخدامات VLA غير المسموح بها في مسودة المعيار ، مثل تشكيل مؤشر لنوع VLA أو تطبيق sizeof لمتغير VLA. لاحظ أنه يبدو الآن أن VLAs لن تكون جزءًا من C ++ 14 ، ولكنها ستكون جزءًا من وثيقة منفصلة ومن ثم C ++ 17.
void f (int n) {
int a [n] = {1، 2، 3}؛ // throws std :: bad_array_length if n & lt؛ 3
[& amp؛ a] {for (int i: a) {cout
1 تعليقات
http://www.eduwizzonlinetrainings.com 29 Dec 17
EduwizzOnlineTraining is one of the Best Online Training Institute in Hyderabad, Bangalore. Eduwizz provide courses like Hybris Development, WebSphere Commerce Server,Blockchain Training,Hyperledger Fabric Development ,Ethereum Development ,Commvault Training, Devops , Netapps , Mulesoft ESB ,Machine Learning,Data Science , Internet of Things , Hybris ,Angular JS , Node JS , Express JS , Business Analyst, Selenium testing with webdriver, Guidewire ,Adobe, RPA ,TSM, EMC...etc