ראשית להרחיב קצת מה זה בעצם מקרו, מקרו זה כלי לביצוע
החלפה טקסטואלית, המחרוזת שמצהירה על המקרו למשל CUBE לעיל
מוחלפת בשלב הpre-processing(לפני הקומפילציה ממש) במחרוזת
ששמים לימינה, כאשר אם יש פרמטרים אז הפרמטרים מוחלפים גם הם
אחד לאחד.מקרו זה כלי יעיל אך מסוכן. אם למשל נשתמש במקרו שהגדרת לעיל
כך:
כאשר foo היא פונקציה עם תוצר לוואי(למשל הדפסה למסך)
אז אנו נשים לב שהפונקציה foo תקרא לא פעם אחת, אלא 3 פעמים
בגלל שבהחלפה הטקסטואלית הפרמטר למקרו הנידון מוכפל התנהגות
כזאת היא לרוב בלתי צפויה ועל כן יש להזהר משימוש לא זהיר.
שימוש במקרו בC++ היינו לא רצוי, ונחשב לתכנות לא נכון!
שימוש במקרו בC הוא מוכר ומשתמשים בהם לא מעט, ב++C יש פתרונות
טובים יותר. בC יש שני שימושים להצהרות כאלו האחת היא
הצהרת קבועים, אשר ב++C רצוי לעשות בעזרת const במקום.
והשני הוא כמו שהוצג לעיל קיצור ביטויים באופן יעיל בלי
הoverhead של קריאה לפונקציה. ב++C משתמשים בפונקציות inline
שמשרתים את אותה מטרה, אבל השימוש בהם הוא הרבה יותר בטוח.
אני מאוד לא מעריך את הספר שממליץ על שימוש במקרו ב++C, זה
מאוד לא רצוי, פשוט כי יש ל++C כלים טובים יותר.
כשאני כותב C אני כותב משתמש במקרוים ב++C יש פתרונות טובים
יותר: const ו inline, התשמשו בהם ולא בdefine.
DRYICE
נ.ב
ניתן להצהיר על מקרו בכל מקום בתוכנית לפני השימוש בו.