C11 (مراجعة معيار C)
C11 (المعروف سابقًا باسم C1X ، ورسميًا ISO/IEC 9899:2011 [ 1 ] ) هو معيار سابق للغة البرمجة C. حلّ محل C99 (المعيار ISO/IEC 9899:1999) ثم حلّ محله C17 (المعيار ISO/IEC 9899:2018). يُوحّد C11 بشكل أساسي الميزات التي تدعمها مُجمّعات البرامج الشائعة حاليًا، ويتضمن نموذجًا تفصيليًا للذاكرة لتحسين دعم تعدد مسارات التنفيذ. نظرًا لتأخر توفر تطبيقات C99 المتوافقة، يجعل C11 بعض الميزات اختيارية، لتسهيل الامتثال لمعيار اللغة الأساسي. [ 2 ] [ 3 ]
تم نشر المسودة النهائية، N1570، [ 4 ] في أبريل 2011. اجتاز المعيار الجديد مراجعة مسودته النهائية في 10 أكتوبر 2011 وتم التصديق عليه رسميًا من قبل المنظمة الدولية للمقاييس (ISO) ونُشر باسم ISO/IEC 9899:2011 في 8 ديسمبر 2011، دون أي تعليقات تتطلب حلًا من قبل الهيئات الوطنية المشاركة.
يتم تعريف ماكرو قياسي __STDC_VERSION__بقيمة 201112Lتشير إلى توفر دعم C11. [ 5 ]
التغييرات عن C99
يتضمن المعيار العديد من التغييرات على لغة C99 ومواصفات المكتبة، مثل [ 6 ]
- مواصفات المحاذاة (
_Alignasالمحدد،_Alignofالمعامل،aligned_allocالدالة، الرأس)<stdalign.h> _Noreturnمُحدِّد الوظيفة والرأس<stdnoreturn.h>- التعبيرات العامة للأنواع باستخدام الكلمة
_Genericالمفتاحية. على سبيل المثال، يُترجم الماكرو التاليcbrt(x)إلىcbrtl(x)،cbrt(x)أوcbrtf(x)اعتمادًا على نوعx:
#define cbrt(x) _Generic((x), long double: cbrtl, \ default: cbrt, \ float: cbrtf)(x)- دعم تعدد الخيوط
_Thread_local( محدد فئة التخزين، رأس يتضمن وظائف إنشاء/إدارة الخيوط، mutex ، متغير الشرط ووظائف التخزين الخاصة بالخيوط ، بالإضافة إلى [ 7 ] للعمليات الذرية التي تدعم نموذج ذاكرة C11).<threads.h><stdatomic.h> - تم تحسين دعم Unicode استنادًا إلى التقرير الفني C Unicode ISO/IEC TR 19769:2004 (
char16_tوأنواعchar32_tتخزين البيانات المشفرة بـ UTF-16 / UTF-32 ، بما في ذلك وظائف التحويل في البادئات الحرفية للسلاسل النصية المقابلة ، بالإضافة إلى بادئة السلاسل النصية المشفرة بـ UTF-8 ). [ 8 ]<uchar.h>uUu8 - إزالة الوظيفة
gets(لصالح أكثر أمانًاfgets)، والتي تم إهمالها في مراجعة معيار لغة C السابقة، ISO/IEC 9899:1999/Cor.3:2007(E). - واجهات التحقق من الحدود (الملحق ك). [ 9 ]
- ميزات قابلية التحليل (الملحق L).
- المزيد من وحدات الماكرو للاستعلام عن خصائص أنواع الفاصلة العائمة، فيما يتعلق بأرقام الفاصلة العائمة غير الطبيعية وعدد الأرقام العشرية التي يمكن للنوع تخزينها.
- الهيكل المجهول وأعضاء النقابات داخل الهياكل أو النقابات المحتوية، على سبيل المثال في
struct MyStruct { int tag ; union { float f ; int n ; }; struct { int x ; int y ; }; };- التأكيدات الثابتة ، التي يتم تقييمها أثناء الترجمة في مرحلة لاحقة من
#ifو#error، عندما يفهم المترجم الأنواع. - وضع إنشاء وفتح حصري (
"…x"لاحقة) لـfopen. يتصرف هذا الوضع كما هو الحالO_CREAT|O_EXCLفي نظام POSIX ، والذي يُستخدم عادةً لملفات القفل . - الوظيفة
quick_exitكطريقة ثالثة لإنهاء البرنامج، تهدف إلى القيام على الأقل بالحد الأدنى من عملية إلغاء التهيئة. [ 10 ] - وظيفة جديدة
timespec_getوبنية مقابلة لها بدرجة من التوافق مع معيار POSIX .<time.h> - وحدات الماكرو لإنشاء القيم المركبة (جزئيًا لأنها
real + imaginary*Iقد لا تعطي القيمة المتوقعة إذاimaginaryكانت لانهائية أو NaN ). [ 11 ]
ميزات اختيارية
يسمح التعديل الجديد للتطبيقات بعدم دعم أجزاء معينة من المعيار، بما في ذلك بعض الأجزاء التي كان دعمها إلزاميًا في تعديل عام 1999. [ 12 ] يمكن للبرامج استخدام وحدات ماكرو محددة مسبقًا لتحديد ما إذا كان التطبيق يدعم ميزة معينة أم لا.
| ميزة | اختبار الميزات (ماكرو) |
|---|---|
| قابلية التحليل (الملحق ل) | __STDC_ANALYZABLE__ |
| واجهات التحقق من الحدود (الملحق ك) | __STDC_LIB_EXT1__ |
تعدد الخيوط ( )<threads.h> | __STDC_NO_THREADS__ |
العناصر الأولية الذرية والأنواع ( ومؤهل النوع) [ 13 ]<stdatomic.h>_Atomic | __STDC_NO_ATOMICS__ |
| IEC 60559 الحساب ذو الفاصلة العائمة (الملحق F) | __STDC_IEC_559__ |
| العمليات الحسابية المعقدة المتوافقة مع معيار IEC 60559 (الملحق G) | __STDC_IEC_559_COMPLEX__ |
الأنواع المعقدة ( )<complex.h> | __STDC_NO_COMPLEX__ |
| المصفوفات ذات الطول المتغير [ 14 ] | __STDC_NO_VLA__ |
دعم المُترجم
بعض ميزات C11 مدعومة من قبل GCC بدءًا من الإصدار 4.6، [ 15 ] وClang بدءًا من الإصدار 3.1، [ 16 ] و IBM XL C بدءًا من الإصدار 12.1، [ 17 ] و Microsoft Visual C++ بدءًا من VS 2019 (16.8) [ 18 ] في سبتمبر 2020.
نقد
لا تزال واجهات التحقق من الحدود الاختيارية (الملحق K) مثيرة للجدل ولم تُطبّق على نطاق واسع، وقد اقتُرح إيقاف استخدامها أو إزالتها من المراجعة التالية للمعيار. [ 19 ] حتى مايكروسوفت، وهي من أبرز الداعمين لهذه الواجهة، لا تلتزم بالتعريف. [ 20 ] إضافةً إلى ذلك، لا يتضمن الملحق K معيار TR24731-2 الأكثر فائدة (وظائف التخصيص الديناميكي)، مثل [21] vasprintfو [ 22 ]open_memstream . تشمل التطبيقات القليلة مفتوحة المصدر مكتبة "Safer C" الخاصة بـ Open Watcom C/C++ [ 22 ] ومكتبة safeclib. [ 23 ]
انظر أيضاً
مراجع
- ↑ "ISO/IEC 9899:2011 - تكنولوجيا المعلومات - لغات البرمجة - C" . www.iso.org .
- ↑ "WG14 N1250 ميثاق C1X" (PDF) .
- ↑ "تقسيم معيار C" . www.open-std.org .
- ↑ مسودة لجنة WG14 N1570 — 12 أبريل 2011
- ↑ "تقرير العيب رقم 411" . ISO/IEC JTC1/SC22/WG14 - C. فبراير 2012. تاريخ الاسترجاع: 4 مايو 2012 .
- ↑ مسودة لجنة WG14 N1516 — 4 أكتوبر 2010
- ↑ "مكتبة العمليات الذرية - cppreference.com" . en.cppreference.com .
- ↑ "WG14 N1286 — "حول دعم TR-19769 وأنواع الأحرف الجديدة"، نيك ستوتون، لاري دوير" (PDF) .
- ↑ بيرين بابكوك-ماكونيل. "API02-C. يجب أن تأخذ الدوال التي تقرأ أو تكتب إلى أو من مصفوفة وسيطًا لتحديد حجم المصدر أو الهدف" .
- ↑ "التخلي عن عملية" . www.open-std.org .
- ↑ "خلق قيمة معقدة" . www.open-std.org .
- ↑ مسودة لجنة WG14 N1548 — 2 ديسمبر 2010 6.10.8.3 وحدات الماكرو للميزات الشرطية
- ↑ "WG14 N1558 محضر اجتماع 14-18 مارس (مسودة)" (PDF) .
- ↑ ISO 9899:2011 لغات البرمجة - C 6.7.6.2 4
- ↑ "سلسلة إصدارات GCC 4.6 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو - مؤسسة البرمجيات الحرة (FSF)" . gcc.gnu.org .
- ↑ "ملاحظات إصدار Clang 3.1" . llvm.org .
- ↑ "إضافة دعم معيار ISO C11 إلى مُجمِّعات IBM XL C/C++" . www.ibm.com . 17 أبريل 2014.
- ↑ "دعم معياري C11 و C17 يصل إلى MSVC" . devblogs.microsoft.com . 14 سبتمبر 2020.
- ↑ "N1969 - تحديث الخبرة الميدانية مع الملحق K - واجهات فحص الحدود" . www.open-std.org .
- ↑ ليفلر، جوناثان. "ج - هل تستخدم وظائف TR 24731 'الآمنة'؟" . ستاك أوفرفلو .
- ↑ "ج - هل تستخدم وظائف TR 24731 'الآمنة'؟" . Stack Overflow .
- ↑ "مكتبة C الأكثر أمانًا - واتكوم المفتوحة" . 3 مايو 2015. مؤرشف من الأصل في 2015-05-03.
- ↑ "safec: مكتبة C الآمنة - README" . rurban.github.io .
للمزيد من القراءة
- N1570 (مسودة عمل لمعيار C11)؛ WG14؛ 2011. ( إصدارات HTML و ASCII )
- ISO/IEC 9899:2011 (المعيار الرسمي C11)؛ ISO ؛ 2011.
- بلوم، توماس (6 أبريل 2012). "ج يحصل أخيرًا على معيار جديد" . مجلة دكتور دوبز .
- واجهة برمجة تطبيقات C آمنة - حل موجز لمشكلة تجاوز سعة المخزن المؤقت، مؤسسة OWASP، مؤتمر OWASP لأمن التطبيقات، بكين 2011
روابط خارجية
- لغة البرمجة سي
- معايير لغات البرمجة
- معايير اللجنة الكهروتقنية الدولية
- معايير ISO
