שאלות תרגיל בית 1

define

define

על ידי אחמד אגבאריה בתאריך
מספר תגובות: 5

איפה עדיף להשתמש במקרו define כדי להגדיר משתנים קבועים, בקבצי .h או .c?

קראתי פעם שעדיף לכתוב את הרוב בקבצי c (חוץ מאלה שאני חייב אותם בקבצי h). האם זה נכון ותקף גם בקורס שלנו?

בתגובה ל: אחמד אגבאריה

תשובה ל: define

על ידי אורטל כהן בתאריך
היי,
זה נכון כי זה עשוי להצביע על מימוש (נניח אם אתה מממש Set על ידי מערך אתה תעדיף שה-define עבור INITIAL_MAX_LENGTH יהיה במסמך c ולא ב-h כיוון שמשתמשים אחרים עלולים להשתמש בזה ואם אתה תשנה את המימוש של Set למימוש אחר זה יהיה טיפה יותר בעייתי)
בתגובה ל: אורטל כהן

תשובה ל: define

על ידי סער אוזנר בתאריך
1. האם זה בעייתי שיהיה define עם אותו שם בקבצים שונים? (האם זה יכול ליצור בעיות בקימפול או בריצה?)
2. מה קורה במידה והשם של הdefine זהה והערך שונה? כל קובץ ישתמש בשלו או שזו פעולה לא מוגדרת?
3. במידה וזה יוצר בעיה האם יש להגדיר אותו בקובץ H?
4. ובאופן כללי איך יודעים על מקרה כזה בכלל? כי תוכניות משתמשות בADT ולא תמיד חשופות לתוכן שלהם?
בתגובה ל: סער אוזנר

תשובה ל: define

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

תשובה ל: define

על ידי סער אוזנר בתאריך
לא ברור לי מה בדקת כי לא עושים include מקובץ C לקובץ C
בכל מקרה השאלה היא מה הפתרון הנכון מבחינת כתיבת קוד:
כתיבת הdefine בקובץ H אשר מופיע בinclude של שני הקבצי C או שינוי השם באחד מהם למרות שהמשמעות והתפקיד זהה?
בתגובה ל: סער אוזנר

תשובה ל: define

על ידי אורטל כהן בתאריך
שוב זה מאוד תלוי אם אתה רוצה להראות מימוש או לא. (כמו בדוגמא שנתתי עם SET מעלה).
אם נניח יש משהו מאוד גנרי. כמו הגדרת Define ל-MAX_INT_VALUE ואתה יודע שזה אמור להופיע במספר קבצים, עדיף שזה יהיה בקובץ h מסוים (עדיף קובץ h מאוד מתאים כגון utilities), אחרת זה נחשב לשכפול קוד (אם אתה רוצה לשנות את הערך, תצטרך לעשות זאת במספר קבצים במקום בקובץ אחד).
אבל אם זה מראה פרטי מימוש של ADT מסוים (נניח MAX_ELEMENTS עבור SET) עדיף לא לשים את זה בקובץ set.h.
אני אומרת דרך אגב מספר כללי אצבע, וזה לא קשור כל כך לתרגיל.