ABA


"שאלה לגבי 2 טעויות נפוצות"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #6642 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 6642
szargel

   21:53   29.07.03   
אל הפורום  
  שאלה לגבי 2 טעויות נפוצות  
 
   1. השימוש ב void main()
2. השימוש ב GOTO בשפה עילית.

אני יודע ששניהם לא תקינים, וקראתי גם את ההסבר של dryice בארכיון, אבל אשמח לקבל הסבר בשפה קצת יותר "פשוטה". (וכמובן הסבר למה השני לא תקין)
תודה.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  הסבר לvoid קראת כבר בארכיון dryice 29.07.03 22:11 1
     תודה רבה szargel 29.07.03 22:58 2
     תודה גם אני התעניינתי ועכשיו הבנתי hll 02.08.03 00:26 3

       
dryice

   22:11   29.07.03   
אל הפורום  
  1. הסבר לvoid קראת כבר בארכיון  
בתגובה להודעה מספר 0
 
   אני לא חושב שיש לי הרבה מה להוסיף, רק להבהיר שאין
בכלל מה להשוות בין שני הטעוית השנייה היא ברוב המוחץ של המקרים
הרבה יותר חמורה.
השימוש בGOTO מותר לפי כל תקן אפשרי הוא לא רצוי כמעט תמיד.
כתיבת void main אסורה על פי התקנים הנפוצים, ואילו התוכנית
תעבוד כראוי || כמעט || תמיד.

השימוש בGOTO בשפות כמו פסקל או C גורם לקפיצה בלתי מותנת
מנקודה אחת בקוד לנקודה אחרת. זאת מבלי להתייחס למצבם של כל מיני
משתנים אחרים מלבד הIP(שמציין איפה אני נמצא בקוד)
הבעיה העיקרית היא לגבי מצב המחסנית, ניסיון לבצע GOTO לתוך
פונקציה פנימית או החוצה מהפונקציה כמעט מובטח שיגרום לקריסת
התוכנית. אבל יש מקרים שהם פחות ברורים, קשה לדעת(למתכנת מתחיל)
בדיוק מה משפיע על מצב המחסנית. למשל הקוד הבא בC מאוד שגוי:


int foo(int n) {
int i;
for (i=0;i<n;++i) {
int j=i*i;
printf("%d",j);
if (j>100) goto end;
printf(" continuing\n");
}
end: return 0;
}

הקוד לעיל, מאוד סביר שיגרום לתוכנית לקרוס, שכן אני מקדם
את הSP כאשר אני מקצה זמנית את j על המחסנית, אבל אני לעולם לא
יוצא באופן מסודר מהבלוק בו j מוגדר. אני קופץ מעל קטע זה.
הצורה הנכונה לכתוב קטע הקוד לעיל היא בעזרת הפקודה break.

ובכלל, השימוש בGOTO הוא ממש לא מבני ולא מסודר. בכל פארדיגמה
תכנותית, אנו מחלקים את העבודה לתת משימות מסודרות בתוך בלוקים
של קוד, וסתם לקפוץ מאחד לשני זה לא ממש בסדר.

יש כמה מקומות מאוד מוגבלים שבהם השימוש בGOTO הוא בסדר,
אבל הם היוצא מן הכלל, ומשום שכל-כך קל להמנע משימוש בGOTO
ההמלצה שלי היא לא להשתמש בGOTO אלא אם כן אתם ממש מבינים למה
לא צריך להשתמש וממש מבינים מה אתם עושים.

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   22:58   29.07.03   
אל הפורום  
  2. תודה רבה  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
hll

   00:26   02.08.03   
אל הפורום  
  3. תודה גם אני התעניינתי ועכשיו הבנתי  
בתגובה להודעה מספר 1
 
   בזכותך...
כי הרי אני יודע קצת אסמבלר ובעצם כל קריאה מתנהגת כמו פקודת GOTO
אבל בשפה עילית יש שיקולים שונים תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net