כיצד להשתמש ב- Try Catch Statements ב-C

Kyzd Lhstms B Try Catch Statements B C



המילים 'נסה' ו'תפוס' מתארות מה לעשות כאשר תוכנית נתקלת בחריג עקב בעיית קוד או נתונים. חריגים מטופלים ב א לְנַסוֹת גוש קוד. בלוקים של תפיסה משמשים כדי למצוא ולטפל בחריגים מבלוקים של ניסיון. שפות תכנות רבות, כולל Python, C++ ו-JavaScript, כוללות נסה לתפוס הצהרות.

מאמר זה מדגים מהי הצהרת try-catch וכיצד היא מיושמת באמצעות דוגמה בתכנות C.

מהי הצהרת Try Catch?

ה לְנַסוֹת משפט מגדיר אוסף של הצהרות שעלולות ליצור חריג. כאשר מתרחש חריג מסוג מסוים, בלוק ה-catch הוא המקום אליו נשלח החריג. המהדר יוציא הודעת שגיאה או שהחריג ימשיך לעלות בערימת השיחות עד שיטופל אם בלוק ה-try/catch לא יצליח לטפל בו.







התחביר הכללי של ה נסה לתפוס ההצהרה ניתנת כ:



לְנַסוֹת {
/*
הכנס איזה קוד שכנראה יגרום לשגיאות
*/
}
לתפוס {
/*
כתוב קוד ל טיפול בשגיאות שנוצרו.
*/
}

מהי הצהרת try-catch ב-C?

C אינו תומך בטיפול בחריגים ואין לו מנגנון מובנה לעשות זאת. עם זאת, אתה יכול לדמות זאת במידה מסוימת באמצעות setjmp ו longjmp שיחות. ללא דרך לשחרר זיכרון לאחר ביקור במחסנית, מנגנוני טיפול בחריגים אינם יעילים ואינם בטוחים, ול-C אין אספן אשפה. כדי לפנות זיכרון RAM, סביר להניח שנצטרך לשלב מנהלי הקשרים.



כעת, כשאנחנו מבצעים שיפורים בקוד, נבנה בהדרגה פתרון. ה-longjmp ו-setjmp, הן שתי פונקציות C שניתן לספק על ידי קובץ הכותרת setjmp.h ינוצל על ידינו. הפונקציה setjmp מקבלת משתנים מסוג jmp_buf ומחזירה 0 כאשר היא נקראת ישירות. כאשר אותו משתנה jmp_buf משמש להפעלת longjmp עם שני משתנים, הפונקציה setjmp מחזירה ערך התואם את הערך של הארגומנט השני של longjmp.





דוגמה ליישום לעיל ניתנת כ:

#include
#include
#define נסה לעשות { jmp_buf buf_state; if (!setjmp(buf_state)) {
#define CATCH } אחר {
#define ENDTRY }} while(0)
#define THROW longjmp(buf_state, 1)
int main ( )
{
לְנַסוֹת {
printf ( 'נסה בדיקת הצהרות \n ' ) ;
לזרוק;
printf ( 'הצהרה לא אמורה להופיע, מכיוון שחסום ה-THROW כבר זרק את החריג \n ' ) ;
}
לתפוס {
printf ( 'יש חריגה \n ' ) ;
}
ENDTRY;
לַחֲזוֹר 0 ;
}

בתוכנית C לעיל, ה ENDTRY הפונקציה משמשת לאספקת החלק הסוגר של בלוק עשה תוך כדי.



סיכום

אם תוכנית נתקלת בחריג עקב שגיאת נתונים או קידוד בזמן שהיא פועלת, ' לְנַסוֹת ' ו' לתפוס ' לתאר כיצד לנהל את זה. ב לְנַסוֹת בלוק קוד, חריגים מתרחשים בזמן א לתפוס בלוק הוא מהיכן השגיאות לְנַסוֹת בלוקים נמצאים ומטופלים. שפות תכנות רבות תומכות ב נסה לתפוס לחסום אבל ה-C לא. מדריך זה תיאר שיטה לשימוש בהצהרות try-catch בתכנות C.