נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: קבועים - מה זה ומתי משתמשים?

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 16 February 2005 בשעה 18:42 | IP רשוּם
ציטוט SBD

אמסך לקבל הרחב על קבועים, למה צריך אותם מה ההבדל בין משתנים לקבועים איך משתמשים בהם וכו'...:)

תודה לעוזרים....



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 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 רשוּם
ציטוט SBD

אז למה לא להשתמש במשתנה כאילו?

מה ההבדל?

יש לי רעיון אבל לא יודע אם הוא נכון:

קבוע זה נמצא רק בקומפיילר כאילו שהתוכנית מתקמפלת הוא ממיר כל מקום שהוא רואה את המילה הזאת מחליף אותה בערך שנתת לקבוע ובעצם לא לוקח מקום בזכון ואילו משתנה לוקח מקום בזכרון כאילו

אחרת אני לא רואה עדיפות לקבוע....:|



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 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 רשוּם
ציטוט SBD

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

סבבה אחי :)

נ.ב אמרת שאהת עובד עם define, יש שיטה אחרת? [אני מניח שגם CONST, יש הבדל ביניהם?]



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 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 רשוּם
ציטוט SBD

אה אז בגדול הרבה הבדל אין :)

סבבה הבנתי בכללי...אם תמצא טקסט טוב שיסביר באופן יותר מפורט אני ישמח בכל מקרה בינתיים זה מספיק לי :)



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה