ראשית, תמיד יש משמעות להחזרת הערך כי פה למעשה אתה מתקשר עם מערכת ההפעלה ומודיע לה האם התכנית שלך סיימה לרוץ בהצלחה או לא. הקונבנציה היא להחזיר 0 במידה והתכנית סיימה את פעולתה בהצלחה וערך אחר במקרה של ERROR. נניח לצורך העניין שיש איזשהו מקום בזכרון, שמיוצג ע"י משתנה של מערכת ההפעלה נאמר SysRet, שאליו מוזנים ערכי החזרה של תהליכים.
עד פה תיארתי את הקונבנציה, פרוטוקול, תקן - תקרא לזה איך שתרצה. ברגע שאתה שובר את ההסכם שלך, אתה מאבד מהבטיחות, כי מערכת ההפעלה פועלת בצורה שלה.
עכשיו נתחיל להתלכלך:
תאר לעצמך כעת שאתה בונה איזשהו רכיב embedded שקיימת בו איזשהי internal os שפותחה עבור אותו רכיב. על הרכיב רץ הליך שכתבת בשפת C אבל עם void main ורצה הגורל ואחת הפונקציות שהשתמשת בהן (נניח HANDLE כלשהו), לא בכוונה, ניגשה ל-SysRet והציבה בו את הערך -400. רצה הגורל ואותה מערכת הפעלה מוציאה שגיאה כאשר מקבלת ערך החזרה שאינו בין -256 ל-256 ומרסטת את עצמה.
נשמע מונפץ קצת?
אתה מוזמן לקרוא פה שזה יורד לרמת האסמבלי.
הרעיון הוא שלפעמים התעלמות מקונבנציות יכולה במקרים איזוטרים להיות הרסנית.
