כותב |
|
SBD פורומיסט על
הצטרף / הצטרפה: 13 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1194
|
נשלח בתאריך: 16 February 2005 בשעה 18:42 | | IP רשוּם
|
|
|
|
אמסך לקבל הרחב על קבועים, למה צריך אותם מה ההבדל בין משתנים לקבועים איך משתמשים בהם וכו'...:)
תודה לעוזרים....
__________________ ~ Nobody Is Perfect, I'm Nobody ~
פורומים
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 16 February 2005 בשעה 22:00 | | IP רשוּם
|
|
|
|
ציטוט מהמסמך שלי על C:
לעיתים קרובות נרצה להגדיר ערך קבוע - להעניק למספר כלשהו שם מיוחד.
למשל, ייתכן שנרצה לשייך למספר 3.142 את השם PI.
נרצה להגדיר ולהשתמש בקבועים עקב שתי סיבות עקריות:
1. קריאות התוכנית - שימוש במילים המציינות ערך מספרי
הרבה יותר קריא משימוש במספרים באותם מקומות. למשל - נניח שאנחנו כותבים
תוכנית לניהול מספר הנוסעים בכל מעלית, שימוש בשם קבוע כגון
MAX_USERS_ALLOWED הוא הרבה יותר ברור משימוש, למשל, במספר 7 בכל אותם
מקומות.
2. תחזוק מהיר - אם ערך מספרי מופיע בתוכנית שלנו פעמים
רבות, וישנה אפשרות שהוא ישתנה ביום מן הימים, נעדיף לשמור אותו כקבוע.
נניח, לדוגמא, כי הערך 1000 מציין את המשקל אותו המעלית מסוגלת לסחוב.
נניח כי ערך זה מופיע 20 פעמים בתוכנית שלנו. במקרה והמשקל ייגדל ל-1200
בדור החדש של המעליות, נאלץ לשנות את הקוד שלנו ב-20 מקומות. אם לעומת
זאת, נשתמש בקבוע אחד, ובכל 20 המקומות נרשום את שם הקבוע, כל שיהיה עלינו
לעשות הוא לשנות את ערכו של הקבוע, והתוכנית תעבוד כשורה.
שפת C
|
חזרה לתחילת העמוד |
|
|
SBD פורומיסט על
הצטרף / הצטרפה: 13 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1194
|
נשלח בתאריך: 16 February 2005 בשעה 22:10 | | IP רשוּם
|
|
|
|
אז למה לא להשתמש במשתנה כאילו?
מה ההבדל?
יש לי רעיון אבל לא יודע אם הוא נכון:
קבוע זה נמצא רק בקומפיילר כאילו שהתוכנית מתקמפלת הוא ממיר כל מקום שהוא רואה את המילה הזאת מחליף אותה בערך שנתת לקבוע ובעצם לא לוקח מקום בזכון ואילו משתנה לוקח מקום בזכרון כאילו
אחרת אני לא רואה עדיפות לקבוע....:|
__________________ ~ Nobody Is Perfect, I'm Nobody ~
פורומים
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 16 February 2005 בשעה 22:38 | | IP רשוּם
|
|
|
|
1. במקרה שאתה משתמש ב#define זה נכון. ההחלפה נעשית עוד לפני הקומפילציה אפילו.
2. יתרון זה נגיד יש לך משתנה למשל, שאתה רוצה להגיד - זה משתנה, אבל אם הוא משתנה, זה שגיאה בתוכנית שלך. למשל נגיד אתה רוצה לכתוב פונקציה שמקבלת מחרוזת וסופרת כמה אותיות יש בה, זה יכול להיות ככה:
קוד:
int len(const char* s) { int count = 0; while (*s != '\0') { count++; s++; } return count; } |
|
|
ה-const אומר שאם תנסה בטעות לשנות את המחרוזת, הקומפיילר יצעק לך הודעת שגיאה וככה אתה מונע מעצמך לעשות טעויות.
|
חזרה לתחילת העמוד |
|
|
SBD פורומיסט על
הצטרף / הצטרפה: 13 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1194
|
נשלח בתאריך: 17 February 2005 בשעה 06:46 | | IP רשוּם
|
|
|
|
סבבה אז בעקרון היתרון זה מבחינת זכרון ומשאבים, ומבחינת נוכחות מבחינת קומפליזציה ומניעת טעויות :)
סבבה אחי :)
נ.ב אמרת שאהת עובד עם define, יש שיטה אחרת? [אני מניח שגם CONST, יש הבדל ביניהם?]
__________________ ~ Nobody Is Perfect, I'm Nobody ~
פורומים
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 17 February 2005 בשעה 07:50 | | IP רשוּם
|
|
|
|
בגדול המון ממה שאתה עושה - אתה מנסה לכתוב כדי למנוע מעצמך לעשות טעויות.
בגלל זה הרבה פעמים מעדיפים קוד ברור על קוד יעיל - פחות סיכוי שיהיו טעויות ויותר קל לתקן טעויות אם יהיו. הזמן שייקח למחשב עוד שניה לטפל בconst שווה את היומיים עבודה שיקח לך לתקן באג שיכול לקרוא אם לא תשתמש בזה
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 17 February 2005 בשעה 07:52 | | IP רשוּם
|
|
|
|
לגבי const ו#define:
define מתבצע לפני הקומפלציה, ולכן אפשר גם לעשות איתו מקרואים (לא תמיד מומלץ, יותר בשביל יעילות זה טוב). const לעומת זאת נבדק על ידי ה-compiler. הייתרון ב-const - למשל אם אתה מגדיר const שהוא int, המהדר יבדוק שאתה באמת משתמש בו במקום שמתאים ל-int. אם תשתמש ב-define, ההודעות שתקבל יהיו פחות ברורות.
|
חזרה לתחילת העמוד |
|
|
SBD פורומיסט על
הצטרף / הצטרפה: 13 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 1194
|
נשלח בתאריך: 17 February 2005 בשעה 15:34 | | IP רשוּם
|
|
|
|
אה אז בגדול הרבה הבדל אין :)
סבבה הבנתי בכללי...אם תמצא טקסט טוב שיסביר באופן יותר מפורט אני ישמח בכל מקרה בינתיים זה מספיק לי :)
__________________ ~ Nobody Is Perfect, I'm Nobody ~
פורומים
|
חזרה לתחילת העמוד |
|
|