C++/חריגות: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Crazy Ivan (שיחה | תרומות)
מאין תקציר עריכה
Skman (שיחה | תרומות)
מ ←‏הקדמה: הוספת פירוט
שורה 2:
== חריגות ב C++ ==
=== הקדמה ===
חריגות ( exceptions באנגלית ) הן המגנון ב ++C שמאפשר לטפל בשגיאות או בחריגות מהתכנון המקורי(מכאן נובע השם) של המתכנת.
חריגות הן חלק ממנגנון טיפול השגיאות ב C++. לעולם אין אנו יכולים להניח שהקוד שלנו ירוץ ללא שגיאות, וב C++ ניתן להודיע על שגיאות באמצעות חריגות, והן מאפשרות להפריד את הטיפול בשגיאות, מהלוגיקה של התוכנה, ובכך ליצור קוד נקי יותר.
בעזרתן, ניתן בכל רגע נתון, לעצור את הריצה של התוכנית, לצאת מ"הסקופ" ולטפל בשגיאה.
כל שורת קוד שהמתכנת כותב מתורגמת לשפת מעבד ( אסמבלי או לאופ-קודים בשכבה נמוכה יותר ) שאותן המעבד מבצע לפי הסדר. ברגע שנמצאת חריגה/שגיאה, המעבד מקבל פקודה ( אופ-קוד ) שאומרת לו "זוהי שגיאה" ( איך זה קורה, נתאר בהמשך )ואז הוא מתחיל בטיפול בשגיאה.
מה שקורה מרגע זה עובד פחות או יותר כך:
* המעבד עוצר את רצף הפקודות של התוכנית.
* הוא מודיע למערכת ההפעלה שהתרחשה שגיאה.
* מערכת ההפעלה בודקת, איזו מן שגיאה זו ומי יודע לטפל בה.
** יש למערכת ההפעלה ( או יותר נכון ל [[CRT]] ) רשימה של handlers שיודעים לטפל בשגיאות.
* אם התוכנית רשמה handler לטיפול בשגיאה הספציפית - הטיפול בשגיאה עובר לתוכנית ( הקוד של המשתמש ).
* אם התוכנית לא רשמה handler מתאים אז מערכת ההפעלה מטפלת בשגיאה.
** מאחר והדבר היחיד שמעניין את מערכת ההפעלה זה להגן על עצמה ועל תהליכים אחרים שרצים בה, הטיפול יהיה לחסל את הפגיעה הנקודתית - או להרוג את התהליך שגרם לשגיאה.
 
חשוב להבין, שכשאנחנו כותבים קוד ומקמפלים אותו, ה[[קומפיילר]] עוטף אותו בהרבה שכבות שיודעות בסופו של דבר לדבר עם [[מערכת ההפעלה]] שעליה אנחנו רצים. הקוד הזה, הוא בלתי נראה למתכנת אבל בכל ריצה של התוכנית יש לו חלק בלתי נפרד מהריצה, מהאתחול של התהליך, דרך בדיקות שרצות במהלך הריצה ועד לירידה מסודרת של התהליך.
לפני שנסביר מהן חריגות, נזכר בטיפול השגיאות בשפת C. נניח שאנו ממשים את הפונקציה sqrt המחזירה שורש של מספר. חתימת הפונקציה:
 
כל אחת משכבות יכולה "לזרוק" שגיאה ( או במילים אחרות להתריע - "שימו לב, משהו לא תקין" ) והשגיאה תעבור דרך כל השכבות מהמעבד ועד לקוד המשתמש עד שאחד המנגנונים "יתפוס" אותה ויטפל בשגיאה.
 
חריגות, הן לא דבר רע. להיפך - הן הדרך שלנו להתגונן בפני דברים רעים שעלולים לקרות.
לפניחריגות שנסבירהן מהןלא חריגות,משהו ייחודי לשפת ++C וגם בשפות אחרות יש שימוש במנגנון זה. למשל - כך היינו נזכרעושים בטיפולאת השגיאותזה בשפת C. נניח שאנו ממשים את הפונקציה sqrt המחזירה שורש של מספר. חתימת הפונקציה:
<source lang="cpp">
double sqrt(double num);
שורה 29 ⟵ 44:
 
בגלל שטיפול השגיאות אינו מובנה בשפה, אנו נאלצים לאחר כל פונקציה, לבדוק האם התרחשה שגיאה שעלולה לפגוע בנכונות התוכנית.
 
=== חריגות ===
{{להשלים}}