ABA


"מחפש פונקציה מובנת ב C"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10172 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10172
DarkMaster
חבר מתאריך 1.8.02
126 הודעות
   14:38   10.12.10   
אל הפורום  
  מחפש פונקציה מובנת ב C  
 
   צהריים טובים לכולם ,
אני מחפש פונקציה שמחזירה לי את כמות השדות שיש במבנה
לדוגמא

typedef struct Accounts
{
char id_account[10];
double balance;
char type[10];
char status[10];
}Accounts;

אז הפונקציה מחזירה לי 4.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  או DarkMaster 10.12.10 18:23 1
  אני לא בטוח שזה אפשרי... Zippo  11.12.10 20:56 2
     לדוגמא DarkMaster 14.12.10 00:53 3
         כן, אבל ב-C, בניגוד לשפות עיליות, אין לך דרך לדעת. Zippo  14.12.10 07:42 4
             מכתב DarkMaster 14.12.10 23:35 5

       
DarkMaster
חבר מתאריך 1.8.02
126 הודעות
   18:23   10.12.10   
אל הפורום  
  1. או  
בתגובה להודעה מספר 0
 
   מחזירה מערך של השמות של השדות גם טוב


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   20:56   11.12.10   
אל הפורום  
  2. אני לא בטוח שזה אפשרי...  
בתגובה להודעה מספר 0
 
לא ב-C.
סה"כ יש לך גישה חופשית, ומבחינתך זה פשוט רצף ביטים באורך מסויים...
העובדה שזה מסודר במבנה, ומתאפשר לך לגשת לכל שדה בשם מתאים, זאת נוחות.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DarkMaster
חבר מתאריך 1.8.02
126 הודעות
   00:53   14.12.10   
אל הפורום  
  3. לדוגמא  
בתגובה להודעה מספר 2
 
   אם אני רוצה להשתמש בקוד למטרת שימוש חוזר ,
ולמשל קיימת לי פונקציה שמדפיסה את הנתונים בשדות של המבנה.

ולמחרת אני רוצה לשלוח מבנה אחר , או אולי לשנות את המבנה שקיים כרגע.
עכשיו אני רוצה שהפונקציה תמיד תוכל לרוץ כל השדות הפנימיים מבלי שאני יצתרך לבצע שינוי בפונקציה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   07:42   14.12.10   
אל הפורום  
  4. כן, אבל ב-C, בניגוד לשפות עיליות, אין לך דרך לדעת.  
בתגובה להודעה מספר 3
 
כל "אובייקט" ב-C, זה פשוט רצף של ביטים שמתחיל במקום מסוים בזיכרון.
זה הכל...
ב-JAVA או #C למשל, יש לך מידע נוסף. metadata. וכך אפשר לבצע בירור של סוג האובייקט בזמן ריצה. RTTI.
ב-C אין כזה דבר. מבחינת הקומפיילר, אפשר לקחת איזשהיא כתובת רנדומלית (ב-user space שלך), ולהכריז עליה שהיא מבנה מסוג כזה או אחר...
תבין שאין כזה דבר לרוץ על השדות הפנימיים.

מה שכן, אתה יכול לייצר metadata משלך.
למשל, להכריז כקונבנציה, שהפונקציה שלך עובדת עם מידע קבוע בתחילתה.
נניח שהמשתנה הראשון חייב להיות unsigned int שאומר כמה שדות יש לך.
וכמספר השדות, יבואו אח"כ רצף של בתים (CHAR) שמייצגים את סוג השדות.
למשל i עבור int או d עבור double וכו'...

שוב, תחשוב שוב על הדיזיין, כי פונקציה שכזאת היא פתרון עקום.
בשפות עיליות, שבהן כל פונקציות ה-RTTI קיימות, אסור (כמעט תמיד) להשתמש בהן!
אתה תצטרך סיבה ממש ממש טובה, וזה יקרה במקרים נדירים מאד שעדיף להשתמש ב-RTTI.
ב-C, אין לך פולימורפיזם, ואין לך אבסטרקטיות (ולא, *void זה לא אבסטרקטי... זה עדיין פוינטר. ואפשר להשתמש בכל פוינטר, כל עוד דואגים לקאסטינג נכון...)
ולכן גם אין צורך אמיתי בפונקציה כמו שאתה רוצה.
תחשוב על התמונה הגדולה. הפונקציה הנ"ל היא באמת הפיתרון הטוב ביותר?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DarkMaster
חבר מתאריך 1.8.02
126 הודעות
   23:35   14.12.10   
אל הפורום  
  5. מכתב  
בתגובה להודעה מספר 4
 
   אני יודע שקיימים פתרונות כאלו בשפות עליות
חשבתי שאני ימצא גם ב C , כי ביקשו ממנו לכתוב את הפרוייקט פרוצדורלי.
תודה על העזרה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net