تأكيد.h

assert.h هو ملف رأس في مكتبة C القياسية . وهو يحدد وحدات الماكرو الخاصة بمعالج C المسبق وينفذ تأكيد وقت التشغيل في C. assert

تم تعريف assert.h في ANSI C كجزء من مكتبة C القياسية. في لغة البرمجة C++ ، يتوفر assert.h و ؛ وكلاهما متكافئان وظيفيًا. [1]<cassert>

يستخدم

ينفذ الماكرو assertتأكيد وقت التشغيل. إذا كان التعبير الموجود فيه خاطئًا، فسيطبع الماكرو رسالة إلى stderrويستدعي abort()، المحدد في stdlib.h . تتضمن الرسالة اسم ملف المصدر ورقم سطر المصدر من وحدات الماكرو __FILE__و __LINE__، على التوالي. [2] منذ C99 ، يتم تضمين اسم الدالة في عبارة التأكيد كـ ( __FUNC__) والتعبير نفسه. [3] في ANSI C، يتم تعريف التعبير في assertالماكرو على أنه عدد صحيح موقّع ، على الرغم من أنه يمكن استخدام أي تعبير يمكن تحويله ضمنيًا إلى عدد صحيح موقّع. في C99، assertيسمح الماكرو صراحةً بأي نوع قياسي . [4] هناك استخدامان شائعان للماكرو assertهما التأكيد على أن المؤشر ليس فارغًا والتأكد من أن مؤشر المصفوفة داخل الحدود. [5]

فيما يلي برنامج يستخدم assertالماكرو. سيتم تقييم هذا البرنامج دائمًا pointerعلى أنه خطأ، لأنه pointerمؤشر فارغ ولا يشير إلى موقع ذاكرة صالح :

#include <assert.h> int main () { void * pointer = 0 ; assert ( pointer ); return 0 ; } 
 

       
    
     

عند تجميع البرنامج وتشغيله، سيتم إخراج رسالة مشابهة للرسالة التالية:

البرنامج: source.c:5: main: فشل التأكيد "pointer". 
تم إلغاؤه (تم تفريغ النواة)

يتغير تعريف الماكرو assertوفقًا لتعريف ماكرو آخر NDEBUG، إذا NDEBUGتم تعريفه كاسم ماكرو، assertيتم تعريف الماكرو على أنه #define assert(ignore) ((void)0)، [3] مما يؤدي إلى عدم تقييم الماكرو للتعبير. قد يؤثر استخدام على NDEBUGالسلوك العام للبرنامج إذا كانت إحدى assertالعبارات أو أكثر تحتوي على آثار جانبية ، حيث لا يتم تقييم هذه العبارات. [6]

assertلا يتضمن الماكرو رسالة خطأ . ومع ذلك، يمكن استخدام عامل الفاصلة لإضافته إلى التعبير المطبوع، كما في . [7]assert(("Not Orwellian", 2 + 2 == 5));

تأكيد ثابت

يخدم الماكرو static_assert، الذي تمت إضافته في C++11 ، غرضًا مشابهًا للماكرو assert. على عكس assertالماكرو، static_assertيتم تشغيله في وقت التجميع وليس وقت التشغيل. [8] استخدم التنفيذ الأصلي اختراقات القالب. [ بحاجة لمصدر ] يأخذ الماكرو static_assertتعبيرًا ثابتًا يمكن تحويله إلى قيمة منطقية وحرف سلسلة؛ إذا فشل التعبير، يتم إرجاع الحرف السلسلة، وإلا، فلن يكون للماكرو أي تأثير. [8] في C++17 ، تم جعل رسالة فشل التأكيد هذه اختيارية، ويتم حذف الرسالة اللاحقة إذا لم يتم تحديدها. [9]

في C11_Static_assert ، تمت إضافة الإعلان المكافئ وظيفيًا . يُعرَّف assert.h static_assertكاسم مستعار لـ _Static_assertلضمان التكافؤ مع C++ . [10] في C23 ، _Static_assertتمت إعادة تسميته إلى static_assertوتم جعل وسيطة السلسلة الحرفية اختيارية. [11] [12] يُعرَّف Gnulibstatic_assert للمنصات التي لا تستخدم C11 ولا تتطلب تضمين assert.h . [13]

مراجع

الاستشهادات

  1. ^ بايندر 2000، ص 860.
  2. ^ كيرنيجان وريتشي 1988، ص 253-254.
  3. ^ أ ب ISO/IEC JTC 1/SC 22/WG14 1999، ص. 169.
  4. ^ "دليل مبرمجي لينكس". 25 أغسطس 2002. تم الاسترجاع في 14 مارس 2023 .
  5. ^ Reekie, John (7 ديسمبر 1995). "كيفية استخدام التأكيدات في لغة C". جامعة كاليفورنيا، بيركلي . تم الاسترجاع في 14 مارس 2023 .
  6. ^ المعهد الوطني الأمريكي للمعايير 1990، ص 76.
  7. ^ غريغوار 2021، ص 1058.
  8. ^ أ ب ISO/IEC JTC 1/SC 22/WG21 2012، ص. 134.
  9. ^ سواميناثان 2017، ص 13.
  10. ^ براتا 2013، ص 762-763.
  11. ^ جوستيد 2022، ص 3.
  12. ^ Ballman & Grammatech 2018، ص 1.
  13. ^ "GNU Gnulib". مؤسسة البرمجيات الحرة . 6 فبراير 2023. تم الاسترجاع في 14 مارس 2023 .

فهرس

  • المعهد الوطني الأمريكي للمعايير (1990). الأساس المنطقي للغة البرمجة ANSI C. Summit: Silicon Press. ISBN 9780929306070.
  • Ballman, Aaron; Grammatech (6 يوليو 2018). تنسيق static_assert مع C++ (تقرير).
  • بايندر، روبرت (2000). اختبار الأنظمة الموجهة للكائنات: النماذج والأنماط والأدوات (الطبعة الثانية). بوسطن: أديسون ويسلي . رقم ISBN 9780201809381.
  • جريجوري، مارك (2021). Professional C++ (الطبعة الخامسة). هوبوكين: وايلي . ISBN 9781119695455.
  • جوستيدت، جينز (15 فبراير 2022). مراجعة تهجئة الكلمات الرئيسية (تقرير).
  • Kernighan, Brian ; Ritchie, Dennis (1988). لغة البرمجة C (الطبعة الثانية). Hoboken: Prentice Hall. ISBN 9780131103627.
  • Lischner, Ray (2009). C++ In a Nutshell: A Desktop Quick Reference (الطبعة الثانية). Sebastopol: O'Reilly Media . ISBN 9781449378837.
  • ISO/IEC JTC 1/SC 22/WG14 (ديسمبر 1999). ISO/IEC 9899:1999 (تقرير).{{cite report}}:CS1 maint: أسماء رقمية: قائمة المؤلفين ( الرابط )
  • ISO/IEC JTC 1/SC 22/WG21 (يناير 2012). ISO/IEC 14882:2011 (تقرير).{{cite report}}:CS1 maint: أسماء رقمية: قائمة المؤلفين ( الرابط )
  • براتا، ستيفن (2013). C Primer Plus (الطبعة السادسة). لندن: بيرسون للتعليم . ISBN 9780133432381.
  • سواميناثان، جيجاناثان (2017). إتقان برمجة C++ . برمنغهام: باكيت . رقم ISBN 9781786461629.
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=Assert.h&oldid=1159368864"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate