קידום PRE ו POST - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

קידום PRE ו POST


MasterDK

Recommended Posts

לפי מה שידוע לי קיימים שני סוגי קידום PRE ו POST

קידום PRE:


++var;

קידום POST:


var++;

עכשיו אני שואל את עצמי מה ההבדל? כבר הרבה זמן אני מנסה להבין את ההבדל..

והאם ה FOR הזה:


for(i=0;i<n;++i)

שונה מה FOR הזה


for(i=0;i<n;i++)

?

אם כן במה?

תדוה רבה על העזרה.

קישור לתוכן
שתף באתרים אחרים

שתי הלולאות אינן שונה.

נסה את הקוד הבא:


int f=1;
cout << f++ << endl;
f=1;
cout << ++f << endl;

הראשון ידפיס 1 ואילו השני 2 כיוון שבראשון פעולת ההוספת התבצעה אחרי ההדפסה ואילו בשני לפני ההדפסה.

קישור לתוכן
שתף באתרים אחרים

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

לחלוטין לא מסכים. אין שום דבר מבלבל ב-i++ או ב-++i כשלעצמו. בטח שזה לא בעיה בתוך אזור for שמיועד לכך.

קישור לתוכן
שתף באתרים אחרים

בסופו של דבר זה עניין של סגנון.

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

לטוב או לרע, להרבה דברים ב-C יש side effects, ויש הרבה ביטויים של C שכל מתכנת C נורמלי צריך להכיר ולעקוב אחריהם בקלות.

לדוגמא הלולאה הבאה, שממש ברור מה היא עושה.


while (len--) *dst++ = *src++;

אני מאמין שהקוד פחות קריא כשכותבים אותו ככה:


while(len != 0)
{
len--;
*dst = *src;
src++;
dst++;
}

קישור לתוכן
שתף באתרים אחרים

בדוגמה הראשונה שלך, לקח לי זמן להבין אם הלולאה תרוץ len או len+1 פעמים.

בדוגמה השנייה לא.

אישית, הייתי כותב את הקוד ככה:

for ( ; len != 0 ; --len)
{
*dst = *src;
++dst;
++src;
}

לדעתי זה הכי ברור. זה ברור ש-len משמש כאינדקס עבור הלולאה.

כשיש לך לולאה פשוטה שאתה יכול להגדיר לה התחלה, קידום וסוף, משתמשים ב-for. ברוב המקרים הקומפיילר גם יודע לייעל לולאות כאלה.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...