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:

  • ISO/IEC 9899:1990/Cor 1:1994 TCOR1 في عام 1994 [ 9 ]
  • ISO/IEC 9899:1990/Cor 2:1996 في عام 1996 [ 10 ]

اختبار المعالج المسبق للتوافق مع C95

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L /* كود مصدر متوافق مع C95. */ #elif defined(__STDC__) /* كود مصدر متوافق مع C89. */ #endif

C99

في مارس 2000، اعتمدت المنظمة الوطنية الأمريكية للمعايير (ANSI) معيار ISO/IEC 9899:1999. [ 11 ] ويُشار إلى هذا المعيار عادةً باسم C99. ومن الإضافات البارزة على المعيار السابق ما يلي:

نشرت المنظمة الدولية للمقاييس (ISO) ثلاثة تصحيحات فنية للمعيار C99:

تم سحب هذا المعيار من قبل كل من 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/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:

انظر أيضاً

مراجع

  1. براد كيليتشافا (14 سبتمبر 2017). "أصل لغة ANSI C ولغة ISO C" . تم الاطلاع عليه بتاريخ 14 أغسطس 2018 .
  2. ريتشارد هيل شو (13 سبتمبر 1988). "المعيار ج: مسودة ANSI تتطور" . مجلة PC . المجلد 7، العدد 15. الصفحات 116-117 . تاريخ الاطلاع: 15 نوفمبر 2022 .   
  3. "المعايير - استخدام مجموعة مترجمات جنو (GCC)" . تم الاطلاع عليه بتاريخ 24-06-2012 .
  4. "INCITS/ISO/IEC 9899" . www.techstreet.com . تم الاطلاع عليه بتاريخ 3 أكتوبر 2018 .
  5. "ISO/IEC 9899:1990 - لغات البرمجة -- C" . تم الاطلاع عليه بتاريخ 24-06-2012 .
  6. كلايف دي دبليو فيذر (2010-09-12). "وصف موجز للملحق المعياري 1" .
  7. "ISO/IEC 9899:1990/Amd 1:1995" . المنظمة الدولية للتوحيد القياسي. 22-03-2013.
  8. "دليل GNU GCC 15.2" . مؤسسة البرمجيات الحرة. 2025.
  9. "ISO/IEC 9899:1990/Cor 1:1994" . المنظمة الدولية للمقاييس . تم الاطلاع عليه بتاريخ 21 يناير 2019 .
  10. "ISO/IEC 9899:1990/Cor 2:1996" . المنظمة الدولية للمقاييس . تم الاطلاع عليه بتاريخ 21 يناير 2019 .
  11. "ISO/IEC 9899:1999" . المنظمة الدولية للمقاييس . تم الاطلاع عليه بتاريخ 21 يناير 2019 .
  12. ^ "INCITS/ISO/IEC 9899-2012" . أنسي.
  13. "ISO/IEC 9899:1999 - لغات البرمجة -- C" . تم الاطلاع عليه بتاريخ 24-06-2012 .
  14. "ISO/IEC 9899:2011/Cor 1:2012" . المنظمة الدولية للتوحيد القياسي.
  15. "ISO/IEC 9899:2018 - تكنولوجيا المعلومات - لغات البرمجة - C" . www.iso.org .
  16. "المعيار - ج" . www.iso-9899.info .
  17. "ISO/IEC 9899:2024 - تكنولوجيا المعلومات - لغات البرمجة - C" .
  18. "ISO/IEC TR 19769:2004" . المنظمة الدولية للتوحيد القياسي.
  19. "ISO/IEC TR 24731-1:2007" . المنظمة الدولية للتوحيد القياسي.
  20. "ISO/IEC TR 18037:2008" . المنظمة الدولية للتوحيد القياسي.
  21. "ISO/IEC TR 24732:2009" . المنظمة الدولية للتوحيد القياسي.
  22. "ISO/IEC TR 24747:2009" . المنظمة الدولية للتوحيد القياسي.
  23. "ISO/IEC TR 24731-2:2010" . المنظمة الدولية للتوحيد القياسي.
  24. "ISO/IEC TS 17961:2013" . المنظمة الدولية للتوحيد القياسي.
  25. "ISO/IEC TS 18661-1:2014" . المنظمة الدولية للتوحيد القياسي.
  26. "ISO/IEC TS 18661-2:2015" . المنظمة الدولية للتوحيد القياسي.
  27. "ISO/IEC TS 18661-3:2015" . المنظمة الدولية للتوحيد القياسي.
  28. "ISO/IEC TS 18661-4:2015" . المنظمة الدولية للتوحيد القياسي.
  29. "ميزات C التجريبية" . cppreference.com . تم الاطلاع عليه بتاريخ 16 يناير 2016 .
  30. "2 معايير لغوية مدعومة من قِبل GCC - 2.1 لغة C" . استخدام مجموعة مُجمِّعات GNU (GCC) . GCC، مجموعة مُجمِّعات GNU . تم الاسترجاع في 5 فبراير 2019 .
  31. "توافق اللغات" . واجهة أمامية لعائلة لغات Clang C لـ LLVM . تم الاسترجاع في 2019-02-05 .
  32. "أسماء الماكرو القياسية المُعرّفة مسبقًا" . www.ibm.com . تم الاطلاع عليه بتاريخ 10 أبريل 2019 .
  33. "حزمة مطوري HP C/ANSI C" . تم الاطلاع عليها بتاريخ 12-07-2015 .
  34. تمت إضافة دعم معيار ISO C11 إلى مُجمِّعات IBM XL C/C++
  35. رابط إلى صفحات Pelles C

للمزيد من القراءة

  • شراينر، أكسل توبياس (1993). البرمجة الشيئية باستخدام ANSI-C . هانسر. رقم ISBN 3-446-17426-5.