» נושאי לימוד
» נושאי לימוד
יום חמישי 2 במאי 2024
סגירות קטעים ביצועיים
דף ראשי  הגן על עצמך  סגירות קטעים ביצועיים גרסה להדפסה

כתיבה של תוכנית בעלת מידה כלשהי של תחכום דורשת שימוש במבני בקרה שונים.

באותה מידה שהם נותנים לשפה כוח וגמישות, הם גם מביאים פוטנציאל להסתבכות מיותרת.

להלן כמה שגיאות טיפוסיות ופתרונות להם. לרוב הפתרונות מאוד פשוטים וברורים, אבל נראים שרירותיים ומוזרים. הם נראים אפילו כגורמים טירחה מיותרת, אבל ישום זהיר של כללים אלו יחסוך המון צרות.

 

מבני בקרה נותנים לנו לשלוט על ביצוע קטע מסוים. בכל פעם שנשתמש ב-if ובסוגי הלולאות השונות נציין מה מתבצע בהם. בכל אחד ממבני הבקרה האלה מותר לרשום פקודה או קטע ביצועי. יש שגיאה נפוצה שיכולה להיות די קשה לגילוי. נניח שאנחנו רוצים להדפיס מספרים:

 

for (nCurNumber = 0; nCurNumber < MAX_NUM; ++nCurNumber)
    cout << nCurNumber << endl;

 

 

נניח עכשיו, שאנחנו רוצים גם לסכום אותם:

 

for (nCurNumber = 0; nCurNumber < MAX_NUMBER; ++nCurNumber) 
nSum += nCurNumber; 
cout << nCurNumber << endl;

 

איך הקומפיילר ידע האם ה- cout הוא בתוך הלולאה או לא?

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

 

תמיד נגדיר קטע ביצועי במבנה בקרה, ע"י שימוש בסוגריים מסולסלות, היינו:

for (nCurNumber = 0; nCurNumber < MAX_NUMBER; ++nCurNumber)
{
    cout << nCurNumber << endl;
}

זה נכון אפילו אם אין שום פקודות בקטע הביצועי. במקרה כזה יהיה לנו בלוק ריק.

 03-04-04 / 21:03  עודכן ,  27-03-04 / 18:07  נוצר ע"י ישי קנובל בתאריך 
 Assert - התגוננות בפני שגיאות זמן ריצה - הקודםהבא - שאלות חזרה 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 4