كيفية استخدام جرب العبارات المزعجة في لغة سي

Kyfyt Astkhdam Jrb Al Barat Almz Jt Fy Lght Sy



تصف الكلمتان 'try' و 'catch' ما يجب القيام به عندما يواجه برنامج استثناءً بسبب رمز أو مشكلة في البيانات. يتم التعامل مع الاستثناءات في يحاول كتلة من التعليمات البرمجية. يتم استخدام كتل الصيد لإيجاد ومعالجة الاستثناءات من كتل التجربة. تتضمن العديد من لغات البرمجة ، بما في ذلك Python و C ++ و JavaScript حاول التقاط صياغات.

توضح هذه المقالة ما هو بيان try-catch وكيف يتم تنفيذه باستخدام مثال في برمجة C.

ما هو بيان المحاولة؟

ال يحاول تحدد العبارة مجموعة من العبارات التي قد تخلق استثناءً. عندما يحدث نوع معين من الاستثناءات ، فإن كتلة catch هي المكان الذي يتم إرسال الاستثناء فيه. سيقوم المترجم إما بإخراج إشعار خطأ أو سيستمر الاستثناء في الانتقال لأعلى مكدس الاستدعاءات حتى تتم معالجته إذا فشلت كتلة try / catch في معالجته.







الصيغة العامة لملف حاول التقاط يتم إعطاء البيان على النحو التالي:



يحاول {
/ *
أدخل بعض التعليمات البرمجية التي من المحتمل أن تولد أخطاء
* /
}
يمسك {
/ *
اكتب رمزًا ل التعامل مع الأخطاء المتولدة.
* /
}

ما هو بيان try-catch في C؟

لا يدعم C معالجة الاستثناءات وليس لديها آلية مدمجة للقيام بذلك. ومع ذلك ، يمكنك محاكاة هذا إلى حد ما باستخدام سيتجمب و longjmp المكالمات. بدون طريقة لتحرير الذاكرة بمجرد زيارة المكدس ، تكون آليات معالجة الاستثناءات غير فعالة وغير آمنة ، ولا يحتوي C على جامع القمامة. لتحرير ذاكرة الوصول العشوائي ، من المحتمل أن نحتاج أيضًا إلى دمج مديري السياق.



الآن ، بينما نجري تحسينات على الكود ، سننشئ حلًا تدريجيًا. longjmp و setjmp ، هما وظيفتان من وظائف C يمكن توفيرهما بواسطة ملف الرأس setjmp.h الذي سنستخدمه من قبلنا. تقبل الدالة setjmp متغيرات النوع jmp_buf وترجع القيمة 0 عندما يتم استدعاؤها مباشرة. عند استخدام متغير jmp_buf نفسه لاستدعاء longjmp بمتغيرين ، تُرجع الدالة setjmp قيمة تطابق قيمة الوسيطة الثانية لـ longjmp.





يتم إعطاء مثال على التنفيذ أعلاه على النحو التالي:

# تضمين
# تضمين
#define TRY do {jmp_buf buf_state؛ إذا (! setjmp (buf_state)) {
#define CATCH} آخر {
#define ENDTRY}} بينما (0)
#define THROW longjmp (buf_state، 1)
انت مين ( )
{
يحاول {
printf ( 'جرب اختبار العبارات ' ) ؛
يرمي؛
printf ( 'يجب ألا تظهر العبارة ، لأن كتلة THROW قد ألقت الاستثناء بالفعل ' ) ؛
}
يمسك {
printf ( 'حصلت على استثناء ' ) ؛
}
نهاية ؛
يعود 0 ؛
}

في برنامج C أعلاه ، فإن ملف النهاية يتم استخدام الوظيفة لتوفير الجزء الختامي من كتلة do-while.



خاتمة

إذا واجه أحد البرامج استثناءً بسبب خطأ في البيانات أو الترميز أثناء تشغيله ، ' يحاول ' و ' يمسك وصف كيفية إدارته. في يحاول كتلة من التعليمات البرمجية ، تحدث استثناءات أثناء ملف يمسك الكتلة من أين تأتي الأخطاء يحاول تم العثور على الكتل والتعامل معها. تدعم العديد من لغات البرمجة حاول التقاط منع ولكن C لا. وصف هذا الدليل طريقة لاستخدام عبارات try-catch في برمجة لغة سي.