#define מה עושה אופרטור ה #x ב #define ?
K KKnDoIt New member 20/11/03 #2 הסימן # לא עושה דבר, הוא חלק ממילת המפתח #define. במילים אחרות: הסימן # אינו אופרטור.
ש שי הכלי16 New member 20/11/03 #3 לא הבנת אותי אני מדבר על האופרטור #x שמשתמשים בו בתוך ה #define, כמו שיש שם את ## בשביל לחבר בין הטקסטים
לא הבנת אותי אני מדבר על האופרטור #x שמשתמשים בו בתוך ה #define, כמו שיש שם את ## בשביל לחבר בין הטקסטים
ש שי הכלי16 New member 21/11/03 #5 יענו #define a(b) #bיעשה "b"? אז למה לא לעשות פשוט: #define a(b) "b"?
א אלדד28 New member 21/11/03 #6 כי.... "b" יתורגם ל-"b" - כלומר, מחרוזת שהיא b. b# יתורגם ל-"הערך של b". למשל, #define a(b) #b printf(a(Hi!!!)); -----> printf ("Hi!!!");
כי.... "b" יתורגם ל-"b" - כלומר, מחרוזת שהיא b. b# יתורגם ל-"הערך של b". למשל, #define a(b) #b printf(a(Hi!!!)); -----> printf ("Hi!!!");
ש שי הכלי16 New member 21/11/03 #7 אממ לא ממש הבנתי, איך בדיוק #define משנה את המשתנים שיש בו בארגומנטים?
א אלדד28 New member 22/11/03 #8 אם כתבת b#, והעברת xyz בתור פרמטר למקרו, יהיה לך "xyz" בכל מקום שיש בו b# בתרגום של המקרו.
E eyalbd New member 22/11/03 #10 זה נקרא stringify או stringize. הסמל # לפני ארגומנט הופך למחרוזת C למשל בדוגמא הבאה: #define DEBUG_OUT(a) cout << #a " = " << (a) << endl Then: DEBUG_OUT(x); ====> cout << "x" " = " << (x) << endl; DEBUG_OUT(a+b); ====> cout << "a+b" " = " << (a+b) << endl;כל זה מתבצע בשלב pre-processor דהיינו לפני שהקומפיילר מתחיל לעבוד. זהו שלב שבו ה PP מבצע include ומשנה טקסט בהתאם לdefine-ים שהוגדרו.
זה נקרא stringify או stringize. הסמל # לפני ארגומנט הופך למחרוזת C למשל בדוגמא הבאה: #define DEBUG_OUT(a) cout << #a " = " << (a) << endl Then: DEBUG_OUT(x); ====> cout << "x" " = " << (x) << endl; DEBUG_OUT(a+b); ====> cout << "a+b" " = " << (a+b) << endl;כל זה מתבצע בשלב pre-processor דהיינו לפני שהקומפיילר מתחיל לעבוד. זהו שלב שבו ה PP מבצע include ומשנה טקסט בהתאם לdefine-ים שהוגדרו.