לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #1  
ישן 09-10-2007, 23:45
  Dark Knight Dark Knight אינו מחובר  
 
חבר מתאריך: 30.07.05
הודעות: 949
שלח הודעה דרך ICQ אל Dark Knight
מנגנון ה-typedef ב-++C/C

שלום,
חלק חשוב מעקרונות ה-ADT הוא הסתרת המימוש מהמשתמש.
זה מתבצע ע"י כתיבה של קובץ header עם הגדרות הטיפוסים והפונק' והגשה של הקוד(מימוש הפונק') כקובץ אובייקט מקומפל.
כמובן, שהמשתמש החיצוני עדין צריך לעבוד איך שהוא עם הטיפוס ולכן ישנו טריק שבו שמים שורה מהסוג הזה בקובץ ה-header:
קוד:
typedef struct data_type_t* DataType;

זה יוצר הגדרת טיפוס DataType כפויינטר לטיפוס struct data_type_t, אלא שהטיפוס הזה מוגדר בשלמותו בקובץ האובייקט שמגיע מקומפל.

מסיבה שאני מנסה להבין - זה עובד.
מה שמבלבל אותי היא העובדה שקימפול פרוייקט C מתבצע בתהליך די מבני:
הקבצים עוברים שלב של Pre-Proccessing בהם מטופלות כל ההנחיות שמתחילות ב-#, בהן DEFINE, INCLUDE וכו'...
הפלט של ה-Pre-Proccessor מועבר לקומפיילר, שהופך כל קובץ לאובייקט, ואז בשילוב עם הספריות הסטנדרטיות כל האובייקטים עוברים ללינקר שיוצר לנו את ה-loading module (executable).
נשאלת השאלה, אם כן, באיזה שלב בדיוק מעובד ה-typedef.
השלב ההגיוני היחיד בתהליך הוא הלינקר, אלא שזה עדין יוצר מספר התנגשויות:
קוד:
typedef struct very_big_struct Person;

אם הטיפוס המוגדר הזה תופס לדוגמא 50 בתים, ומוגדר בקובץ Friends.h ואני משתמש בו ב-init.c בצורה חופשית (מגדיר משתנים מהסוג הנ"ל בפונק') צריך להקצות שטח מספיק על המחסנית, אבל אז עד שלב הלינקינג אי אפשר לדעת כמה מקום להקצות...

למישהו יש פתרון לפרדוקס?
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 20:51

הדף נוצר ב 0.04 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר