ABA


"מדריך ל Macros בשפת C++:"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #7259 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 7259
TheBinary

דרג אמינות חבר זה
   20:12   01.11.03   
אל הפורום  
  מדריך ל Macros בשפת C++:  
 
   ערכתי לאחרונה בתאריך 01.11.03 בשעה 20:13 בברכה, TheBinary
 
דבר ראשון, תהנו
המדריך נכתב ע"י TheBinary ואין להעתיקו ללא קרדיט!
נעזרתי מאוד בספר C++ בקלות בהוצאת הוד עמי.
מהו מאקרו?
מאקרו הוא הצהרה על ביטוי מתמטי ארוך בקצרה.
דוגמא: במקום לכתוב ביטוי ארוך כמו זה הרבה פעמים בתוכנית:
result = x * x * x;
נצהיר על מאקרו בשם כלשהו (אני בחרתי CUBE) אשר יקצר את התהליך.
אחרי ההצהרה, נוכל לכתוב
CUBE(x);
במקום זה:
result = x * x * x;
הצהרת המאקרו
דוגמא להצהרה על המאקרו שרצינו מקודם (CUBE) (דוגמא אחת שווה לאלף הסברים ):
#define CUBE(x) ((x) * (x) * (x))
את ההצהרה שמים אחרי ההוראות include, ולכן לא צריך לשים בסופה ;.
עכשיו נראה דוגמא לתוכנית פשוטה:
#include <iostream.h>
#define CUBE(x) ((x) * (x) * (x))

int main() {
cout << "8 cubed is " << CUBE(8);
return 0;
}

זהו סוף המדריך.
המדריך נכתב ע"י TheBinary ואין להעתיקו ללא קרדיט!
נעזרתי מאוד בספר C++ בקלות בהוצאת הוד עמי.
תהנו


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  תודה רבה על המדריך למדתי משהו :) TheCoolMan 02.11.03 19:34 1
  הבהרות והערות dryice 02.11.03 21:16 2
     טוב לדעת, תודה TheBinary 03.11.03 07:27 3

       
TheCoolMan

דרג אמינות חבר זה
   19:34   02.11.03   
אל הפורום  
  1. תודה רבה על המדריך למדתי משהו :)  
בתגובה להודעה מספר 0
 
   תמשיך כך


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

דרג אמינות חבר זה
   21:16   02.11.03   
אל הפורום  
  2. הבהרות והערות  
בתגובה להודעה מספר 0
 
   ראשית להרחיב קצת מה זה בעצם מקרו, מקרו זה כלי לביצוע
החלפה טקסטואלית, המחרוזת שמצהירה על המקרו למשל CUBE לעיל
מוחלפת בשלב הpre-processing(לפני הקומפילציה ממש) במחרוזת
ששמים לימינה, כאשר אם יש פרמטרים אז הפרמטרים מוחלפים גם הם
אחד לאחד.

מקרו זה כלי יעיל אך מסוכן. אם למשל נשתמש במקרו שהגדרת לעיל
כך:


CUBE(foo(x))

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

שימוש במקרו בC++ היינו לא רצוי, ונחשב לתכנות לא נכון!
שימוש במקרו בC הוא מוכר ומשתמשים בהם לא מעט, ב++C יש פתרונות
טובים יותר. בC יש שני שימושים להצהרות כאלו האחת היא
הצהרת קבועים, אשר ב++C רצוי לעשות בעזרת const במקום.
והשני הוא כמו שהוצג לעיל קיצור ביטויים באופן יעיל בלי
הoverhead של קריאה לפונקציה. ב++C משתמשים בפונקציות inline
שמשרתים את אותה מטרה, אבל השימוש בהם הוא הרבה יותר בטוח.

אני מאוד לא מעריך את הספר שממליץ על שימוש במקרו ב++C, זה
מאוד לא רצוי, פשוט כי יש ל++C כלים טובים יותר.
כשאני כותב C אני כותב משתמש במקרוים ב++C יש פתרונות טובים
יותר: const ו inline, התשמשו בהם ולא בdefine.

DRYICE

נ.ב
ניתן להצהיר על מקרו בכל מקום בתוכנית לפני השימוש בו.


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

דרג אמינות חבר זה
   07:27   03.11.03   
אל הפורום  
  3. טוב לדעת, תודה  
בתגובה להודעה מספר 2
 
   את החלק הראשון על ה Pre Proccessing ידעתי, את השאר לא.
לא חשבתי על הרעיון של inline, אבל זה באמת אותו דבר עם קצת יותר אפשרויות.
טוב לדעת


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

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

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



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