ANSI C
تُعدّ معايير ANSI C و ISO C و Standard C معايير متتالية للغة البرمجة C، صادرة عن المعهد الوطني الأمريكي للمعايير (ANSI) واللجنة الفنية المشتركة 1/اللجنة الفرعية 22 /الفريق العامل 14 التابعة للمنظمة الدولية للمعايير (ISO) واللجنة الكهروتقنية الدولية (IEC). تاريخيًا، كانت هذه التسميات تُشير تحديدًا إلى النسخة الأصلية والأكثر دعمًا من المعيار (المعروفة باسم C89 أو C90 ). يُشجَّع مطورو البرامج الذين يكتبون بلغة C على الالتزام بهذه المعايير، لأن ذلك يُسهِّل نقل البرامج بين مختلف المُترجمات.
التاريخ والتوقعات
نُشر أول معيار للغة C من قِبل المعهد الوطني الأمريكي للمعايير (ANSI). ورغم اعتماد هذا المعيار لاحقًا من قِبل المنظمة الدولية للمعايير (ISO) واللجنة الكهروتقنية الدولية (IEC)، واعتماد ANSI للمراجعات اللاحقة الصادرة عن ISO/IEC، إلا أن مصطلح "ANSI C" لا يزال يُستخدم للإشارة إلى المعيار. [ 1 ] بينما يستخدم بعض مطوري البرامج مصطلح ISO C، يستخدم آخرون معيار C، فهم محايدون تجاه هيئات المعايير.
المواصفات غير الرسمية: K&R C ( C78 )
المواصفات غير الرسمية في عام 1978 ( كتاب برايان كيرنيغان ودينيس ريتشي بعنوان لغة البرمجة C ).
توحيد C
في عام 1983، شكّل المعهد الوطني الأمريكي للمعايير لجنةً، X3J11، لوضع مواصفات قياسية للغة C. وفي عام 1985، صدرت المسودة الأولى للمعيار، والتي يُشار إليها أحيانًا باسم C85 . وفي عام 1986، صدرت مسودة معيارية أخرى، يُشار إليها أحيانًا باسم C86 . ونُشرت النسخة التجريبية من معيار C في عام 1988، ويُشار إليها أحيانًا باسم C88 . [ 2 ]
C89
اكتمل معيار ANSI في عام 1989 وتم اعتماده تحت مسمى ANSI X3.159-1989 "لغة البرمجة C". يُشار إلى هذه النسخة من اللغة غالبًا باسم "ANSI C". لاحقًا، يُستخدم أحيانًا الرمز "C89" لتمييزها عن C90، ولكن باستخدام نفس أسلوب التسمية.
C90
تم اعتماد نفس معيار C89 من قبل المنظمة الدولية للمقاييس/اللجنة الكهروتقنية الدولية تحت مسمى ISO/IEC 9899:1990، مع تغييرات في التنسيق فقط، [ 3 ] والذي يشار إليه أحيانًا باسم C90. لذلك، يشير مصطلحا "C89" و"C90" إلى لغة متطابقة تقريبًا.
تم سحب هذا المعيار من قبل كل من ANSI/INCITS [ 4 ] و ISO/IEC. [ 5 ]
C94/C95
في عام 1995، نشرت المنظمة الدولية للمعايير ( ISO) واللجنة الكهروتقنية الدولية (IEC) ملحقًا لمعيار لغة C، يُعرف باسم التعديل 1. وأصبح اسمه الكامل ISO/IEC 9899:1990/AMD1:1995 ، ويُشار إليه اختصارًا بـ C94 أو C95 . وبالإضافة إلى تصحيح الأخطاء، طرأت تغييرات أخرى على إمكانيات اللغة، [ 6 ] [ 7 ] مثل:
- تحسين دعم الأحرف متعددة البايت والأحرف العريضة في المكتبة القياسية، بالإضافة إلى إدخال وإخراج متعدد البايت
<wchar.h><wctype.h> - إضافة الثنائيات إلى اللغة
- تحديد وحدات الماكرو القياسية للتحديد البديل للمشغلين ، على سبيل المثال
andلـ&& - مواصفات الماكرو القياسي
__STDC_VERSION__.
كان هذا أول معيار يحمل قيمة __STDC_VERSION__ (199409L)، وأول إصدار لا يتطابق فيه العام في هذه القيمة مع عام النشر (1995)، مما أدى إلى شيوع استخدام اسمي C94 و C95 . وتكرر هذا الأمر في C17 (2018) وC23 (2024)، لكنهما يُعرفان عادةً بسنواتهما الأولى، بينما يُشار إلى هذا المعيار غالبًا بسنة إصداره الأخيرة. [ 8 ]
بالإضافة إلى التعديل، نشرت ISO تصويبين تقنيين لـ C90:
اختبار المعالج المسبق للتوافق مع C95
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L /* كود مصدر متوافق مع C95. */ #elif defined(__STDC__) /* كود مصدر متوافق مع C89. */ #endifC99
في مارس 2000، اعتمدت المنظمة الوطنية الأمريكية للمعايير (ANSI) معيار ISO/IEC 9899:1999. [ 11 ] ويُشار إلى هذا المعيار عادةً باسم C99. ومن الإضافات البارزة على المعيار السابق ما يلي:
- أنواع البيانات المدمجة الجديدة :
long long،_Bool،_Complex، و_Imaginary - تتضمن العديد من ميزات اللغة الأساسية الجديدة ما يلي: مؤشرات المصفوفات الثابتة، والمُهيئات المُخصصة ، والقيم الحرفية المركبة ، والمصفوفات ذات الطول المتغير ، وأعضاء المصفوفات المرنة ، ووحدات الماكرو المتغيرة ، والكلمات
restrictالمفتاحية - تتضمن المكتبة عدة رؤوس جديدة ، بما في ذلك
stdint.h، و ، و<tgmath.h>fenv.h<complex.h> - تحسين التوافق مع العديد من ميزات لغة C++ ، بما في ذلك الدوال المضمنة ، والتعليقات أحادية السطر
//، ودمج التصريحات والتعليمات البرمجية، وأسماء الأحرف العامة في المعرفات. - تمت إزالة العديد من ميزات لغة C89 الخطيرة مثل تعريفات الدوال الضمنية والضمنية
int
نشرت المنظمة الدولية للمقاييس (ISO) ثلاثة تصحيحات فنية للمعيار C99:
- ISO/IEC 9899:1999/Cor 1:2001(E)
- ISO/IEC 9899:1999/Cor 2:2004(E)
- معيار ISO/IEC 9899:1999/Cor 3:2007(E)، الذي يتميز بإلغاء وظيفة gets في المكتبة القياسية
تم سحب هذا المعيار من قبل كل من ANSI/INCITS [ 12 ] و ISO/IEC [ 13 ] لصالح C11.
C11
تم التصديق على C11 ونشره رسميًا في 8 ديسمبر 2011. وتشمل الميزات البارزة تحسين دعم Unicode ، والتعبيرات العامة للأنواع باستخدام الكلمة الرئيسية الجديدة ، وواجهة برمجة تطبيقات متعددة الخيوط_Generic عبر الأنظمة الأساسية ( )، ودعم الأنواع الذرية في كل من اللغة الأساسية والمكتبة ( ).threads.hstdatomic.h
نشرت المنظمة الدولية للمقاييس (ISO) تصحيحًا فنيًا واحدًا للمعيار C11:
- ISO/IEC 9899:2011/Cor 1:2012 [ 14 ]
C17
تم نشر C17 في يونيو 2018. [ 15 ] بدلاً من تقديم ميزات لغوية جديدة، فإنه يعالج فقط العيوب الموجودة في C11. [ 16 ]
C23
تم نشر C23 في أكتوبر 2024، وهو المعيار الحالي للغة البرمجة C. [ 17 ]
C2Y
C2Y هو اسم غير رسمي للمراجعة التالية للغة البرمجة C والتي من المأمول إصدارها في أواخر العقد الثاني من القرن الحادي والعشرين.
منشورات أخرى ذات صلة من المنظمة الدولية للمقاييس (ISO)
كجزء من عملية التقييس، تنشر المنظمة الدولية للتوحيد القياسي (ISO/IEC) أيضًا تقارير فنية ومواصفات متعلقة بلغة البرمجة C:
- ISO/IEC TR 19769:2004، [ 18 ] بشأن ملحقات المكتبة لدعم تنسيقات تحويل Unicode ، المدمجة في C11
- ISO/IEC TR 24731-1:2007، [ 19 ] بشأن ملحقات المكتبة لدعم الواجهات التي يتم التحقق من حدودها، المدمجة في C11
- ISO/IEC TR 18037:2008، [ 20 ] بشأن امتدادات لغة C المضمنة
- ISO/IEC TR 24732:2009، [ 21 ] بشأن الحساب العشري ذي الفاصلة العائمة ، تم استبداله بواسطة ISO/IEC TS 18661-2:2015
- ISO/IEC TR 24747:2009، [ 22 ] بشأن الدوال الرياضية الخاصة،
- ISO/IEC TR 24731-2:2010، [ 23 ] بشأن امتدادات المكتبة لدعم وظائف التخصيص الديناميكي
- ISO/IEC TS 17961:2013، [ 24 ] بشأن البرمجة الآمنة في لغة C
- ISO/IEC TS 18661-1:2014، [ 25 ] بشأن الحساب الثنائي ذي الفاصلة العائمة المتوافق مع IEC 60559:2011
- المعيار ISO/IEC TS 18661-2:2015، [ 26 ] بشأن العمليات الحسابية العشرية ذات الفاصلة العائمة المتوافقة مع معيار IEC 60559:2011
- ISO/IEC TS 18661-3:2015، [ 27 ] بشأن التبادل المتوافق مع IEC 60559:2011 وأنواع الفاصلة العائمة الموسعة
- ISO/IEC TS 18661-4:2015، [ 28 ] بشأن الوظائف التكميلية المتوافقة مع معيار IEC 60559:2011
هناك المزيد من المواصفات الفنية قيد التطوير وفي انتظار الموافقة، بما في ذلك الجزء الخامس والأخير من TS 18661، وهو مواصفات ذاكرة المعاملات البرمجية، وامتدادات المكتبة المتوازية. [ 29 ]
دعم من كبرى شركات تجميع البرامج
يدعم معيار ANSI C جميع المترجمات الشائعة الاستخدام تقريبًا. يُعدّ كل من GCC وClang من أبرز مترجمات لغة C وأكثرها شيوعًا اليوم، وكلاهما مبني على معيار C11 مع تحديثات تتضمن تغييرات من مواصفات لاحقة مثل C17. [ 30 ] [ 31 ] يُضمن عمليًا أن أي كود مصدر مكتوب بلغة C القياسية فقط ، ودون أي افتراضات تعتمد على الأجهزة، سيُترجم بشكل صحيح على أي منصة مزودة بتنفيذ متوافق للغة C. بدون هذه الاحتياطات، قد تُترجم معظم البرامج فقط على منصة معينة أو باستخدام مترجم محدد، وذلك بسبب استخدام مكتبات غير قياسية، مثل مكتبات واجهة المستخدم الرسومية ، أو بسبب الاعتماد على خصائص خاصة بالمترجم أو المنصة، مثل الحجم الدقيق لأنواع بيانات معينة وترتيب البايتات .
إمكانية اكتشاف الامتثال
للتخفيف من الاختلافات بين K&R C ومعيار ANSI C، __STDC__يمكن استخدام الماكرو ("standard c") لتقسيم التعليمات البرمجية إلى أقسام ANSI و K&R.
#if defined(__STDC__) && __STDC__ extern int getopt ( int , char * const * , const char * ); #else extern int getopt (); #endifفي المثال أعلاه، يُستخدم نموذج أولي في تعريف الدالة للتطبيقات المتوافقة مع معيار ANSI، بينما يُستخدم تعريف قديم غير نموذجي في غير ذلك. ولا تزال هذه التعريفات متوافقة مع معيار ANSI حتى إصدار C99. لاحظ كيف يتحقق هذا الكود من كلٍّ من التعريف والتقييم: وذلك لأن بعض التطبيقات قد تُعيّن القيمة __STDC__إلى الصفر للإشارة إلى عدم التوافق مع معيار ANSI. [ 32 ]
دعم المُترجم
قائمة المترجمات التي تدعم لغة ANSI C:
- Acornsoft ANSI C (الإصدار الأول في عام 1988، وتمت مراجعته في عام 1989)
- مجموعة أدوات تجميع أمستردام (C K&R و C89/90)
- ARM RealView
- Clang (C89/C90 وC99 كاملة، وC11 وC17 وC23 وC2y جزئية)، باستخدام واجهة LLVM الخلفية
- GCC (كامل C89/90، C99، C11، C17، C23 وبعض C2y التجريبي/غير المكتمل)
- مُترجم HP C/ANSI C (C89 و C99) [ 33 ]
- IBM XL C/C++ (C11، بدءًا من الإصدار 12.1) [ 34 ]
- معالج Intel ICC (تعتمد الإصدارات اللاحقة على clang ، وتدعمه )
- LabWindows/CVI
- شركة ذات مسؤولية محدودة
- أوراكل ديفيلوبر ستوديو
- OpenWatcom (C89/90 وبعض C99)
- Pelles C (C99 و C11. نظام التشغيل Windows فقط.) [ 35 ]
- vbcc (C89/90 و C99)
- مُترجم لغة C صغير (C89/90 وبعض C99)
انظر أيضاً
مراجع
- ↑ براد كيليتشافا (14 سبتمبر 2017). "أصل لغة ANSI C ولغة ISO C" . تم الاطلاع عليه بتاريخ 14 أغسطس 2018 .
- ↑ ريتشارد هيل شو (13 سبتمبر 1988). "المعيار ج: مسودة ANSI تتطور" . مجلة PC . المجلد 7، العدد 15. الصفحات 116-117 . تاريخ الاطلاع: 15 نوفمبر 2022 .
- ↑ "المعايير - استخدام مجموعة مترجمات جنو (GCC)" . تم الاطلاع عليه بتاريخ 24-06-2012 .
- ↑ "INCITS/ISO/IEC 9899" . www.techstreet.com . تم الاطلاع عليه بتاريخ 3 أكتوبر 2018 .
- ↑ "ISO/IEC 9899:1990 - لغات البرمجة -- C" . تم الاطلاع عليه بتاريخ 24-06-2012 .
- ↑ كلايف دي دبليو فيذر (2010-09-12). "وصف موجز للملحق المعياري 1" .
- ↑ "ISO/IEC 9899:1990/Amd 1:1995" . المنظمة الدولية للتوحيد القياسي. 22-03-2013.
- ↑ "دليل GNU GCC 15.2" . مؤسسة البرمجيات الحرة. 2025.
- ↑ "ISO/IEC 9899:1990/Cor 1:1994" . المنظمة الدولية للمقاييس . تم الاطلاع عليه بتاريخ 21 يناير 2019 .
- ↑ "ISO/IEC 9899:1990/Cor 2:1996" . المنظمة الدولية للمقاييس . تم الاطلاع عليه بتاريخ 21 يناير 2019 .
- ↑ "ISO/IEC 9899:1999" . المنظمة الدولية للمقاييس . تم الاطلاع عليه بتاريخ 21 يناير 2019 .
- ^ "INCITS/ISO/IEC 9899-2012" . أنسي.
- ↑ "ISO/IEC 9899:1999 - لغات البرمجة -- C" . تم الاطلاع عليه بتاريخ 24-06-2012 .
- ↑ "ISO/IEC 9899:2011/Cor 1:2012" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC 9899:2018 - تكنولوجيا المعلومات - لغات البرمجة - C" . www.iso.org .
- ↑ "المعيار - ج" . www.iso-9899.info .
- ↑ "ISO/IEC 9899:2024 - تكنولوجيا المعلومات - لغات البرمجة - C" .
- ↑ "ISO/IEC TR 19769:2004" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TR 24731-1:2007" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TR 18037:2008" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TR 24732:2009" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TR 24747:2009" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TR 24731-2:2010" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TS 17961:2013" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TS 18661-1:2014" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TS 18661-2:2015" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TS 18661-3:2015" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ISO/IEC TS 18661-4:2015" . المنظمة الدولية للتوحيد القياسي.
- ↑ "ميزات C التجريبية" . cppreference.com . تم الاطلاع عليه بتاريخ 16 يناير 2016 .
- ↑ "2 معايير لغوية مدعومة من قِبل GCC - 2.1 لغة C" . استخدام مجموعة مُجمِّعات GNU (GCC) . GCC، مجموعة مُجمِّعات GNU . تم الاسترجاع في 5 فبراير 2019 .
- ↑ "توافق اللغات" . واجهة أمامية لعائلة لغات Clang C لـ LLVM . تم الاسترجاع في 2019-02-05 .
- ↑ "أسماء الماكرو القياسية المُعرّفة مسبقًا" . www.ibm.com . تم الاطلاع عليه بتاريخ 10 أبريل 2019 .
- ↑ "حزمة مطوري HP C/ANSI C" . تم الاطلاع عليها بتاريخ 12-07-2015 .
- ↑ تمت إضافة دعم معيار ISO C11 إلى مُجمِّعات IBM XL C/C++
- ↑ رابط إلى صفحات Pelles C
للمزيد من القراءة
- شراينر، أكسل توبياس (1993). البرمجة الشيئية باستخدام ANSI-C . هانسر. رقم ISBN 3-446-17426-5.
روابط خارجية
- مجموعة عمل ISO C
- مسودة معيار ANSI C (ANSI X3J11/88-090) (13 مايو 1988)، المراجعة العامة الثالثة
- مسودة الأساس المنطقي لمعيار ANSI C (ANSI X3J11/88-151) (18 نوفمبر 1988)
- C نشرة المعلومات رقم 1 (ANSI X3J11/93-007) (27 مايو 1992)
- قواعد لغة ANSI C Yacc
- معايير المعهد الوطني الأمريكي للمعايير
- لغة البرمجة سي
- معايير لغات البرمجة
