ההבדל בין Inline למקרו ב- C ++

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 2 אַפּרִיל 2021
תאריך עדכון: 16 מאי 2024
Anonim
RAM Explained - Random Access Memory
וִידֵאוֹ: RAM Explained - Random Access Memory

תוֹכֶן


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

בואו ונבדוק את ההבדל בין קו למאקרו בעזרת תרשים השוואה.

  1. טבלת השוואה
  2. הגדרה
  3. הבדלים עיקריים
  4. סיכום

טבלת השוואה

בסיס להשוואהבשורהמאקרו
בסיסי פונקציות מוטבעות מנותחות על ידי המהדר.מעבדי המקרו מורחבים על ידי המעבד המקדים.
תחבירinline return_type פונקצית שם (פרמטרים) {. . . }# הגדר macro_name char_sequence
מילות מפתח בשימושבשורה
# הגדר
מוגדרניתן להגדיר אותו בתוך הכיתה או מחוצה לה.זה מוגדר תמיד בתחילת התוכנית.
הערכהזה מעריך את הטענה רק פעם אחת.זה מעריך את הטיעון בכל פעם שמשתמשים בו בקוד.
הרחבה המהדר עשוי שלא להטמיע ולהרחיב את כל הפונקציות.קבצי מאקרו תמיד מורחבים.
אוטומציההפונקציות הקצרות המוגדרות בתוך הכיתה נעשות אוטומטית לפונקציות מוטבעות.יש להגדיר פקודות מאקרו באופן ספציפי.
גישהפונקציית חבר מוטבעת יכולה לגשת לחברי הנתונים בכיתה.מאקרו לעולם אינו יכול להיות חברי הכיתה ואינו יכול לגשת לחברי הנתונים בכיתה.
סיוםהגדרת פונקציית הקו מסתיימת עם הסוגריים המתולתלים בסוף פונקציית הקו.הגדרת המאקרו מסתיימת עם הקו החדש.
ניפוי באגיםניקוי ניפוי קל לפונקציה מוטבעת שכן בדיקת שגיאות נעשית במהלך הידור.ניפוי באגים הופך לקשה עבור פקודות מאקרו מכיוון שבדיקת שגיאות אינה מתרחשת במהלך ההרכבה.
כריכהפונקציה מוטבעת קושרת את כל ההצהרות בגוף הפונקציה היטב כמו שגוף הפונקציה מתחיל ומסתיים בסוגריים המתולתלים.מאקרו מתמודד עם בעיית הכריכה אם יש לו יותר מהצהרה אחת, מכיוון שאין לה סמל סיום.


הגדרת Inline

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

# כלול שימוש במרחב השמות std; דוגמה בכיתה {int a, b; פומבי: אתחול חלל מוטבע (int x, int y) {a = x; b = y} תצוגה בטלה () {cout << a << "" <

בתוכנית לעיל הכרזתי והגדרתי, הפונקציה מאתחלת (), כפונקציה מוטבעת בכיתה "דוגמה". הקוד של פונקציית האתחול () יתרחב במקום בו הוא מופעל על ידי האובייקט של הכיתה "דוגמה". תצוגת הפונקציה (), שהוגדרה בדוגמה של הכיתה אינה מוכרזת כקובעת, אך היא עשויה להיחשב כקובעת על ידי המהדר, כ ב- C ++ הפונקציה המוגדרת בתוך הכיתה נעשית אוטומטית בקו על ידי המהדר בהתחשב באורך הפונקציה.

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

הגדרת מאקרו

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


# כלול # הגדר GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "הגדול מבין 10 ו- 20 הוא" << GREATER ("20", "10") << " n"; להחזיר 0; }

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

  • המאקרו מוגדר תמיד באותיות גדולות רק כדי להקל על המתכנתים לזהות את כל המקרו בתכנית בזמן הקריאה.
  • המאקרו לעולם אינו יכול להיות פונקציית חברים בכיתה, והוא גם לא יכול לגשת לחברי הנתונים בשום כיתה.
  • פונקציית המאקרו מעריכה את הארגומנט בכל פעם שהוא מופיע בהגדרתו אשר מביא לתוצאה בלתי צפויה.
  • מאקרו חייב להיות בגודל קטן יותר מאחר שמקרואים גדולים יותר יגדלו שלא לצורך את הקוד.
  1. ההבדל הבסיסי בין inline למקרו הוא שפונקציות inline מנותחות על ידי המהדר ואילו המקרו בתוכנה מורחבים על ידי מעבד מקדים.
  2. מילת המפתח המשמשת להגדרת פונקציה מוטבעת היא "בשורה"בעוד שמילת המפתח המשמשת להגדרת מאקרו היא"# הגדר“.
  3. ברגע שפונקציית הקו מתבצעת בתוך כיתה, ניתן להגדיר אותה בתוך כיתה או מחוץ לשיעור. מצד שני, מאקרו מוגדר תמיד בתחילת התוכנית.
  4. הארגומנט המועבר לפונקציות מוטבעות מוערך רק פעם אחת תוך כדי אוספים ואילו ארגומנט המקרו מוערך בכל פעם שמאקרו משמש בקוד.
  5. המהדר עשוי שלא להטמיע ולהרחיב את כל הפונקציות שהוגדרו בתוך כיתה. מצד שני, מקרואים תמיד מורחבים.
  6. הפונקציה הקצרה המוגדרת בתוך כיתה ללא מילת מפתח מוטבעת מבוצעת באופן אוטומטי פונקציות מוטבעות. מצד שני, יש להגדיר מאקרו באופן ספציפי.
  7. פונקציה שהיא מוטבעת יכולה לגשת לחברי הכיתה ואילו מאקרו לעולם לא יכול לגשת לחברי הכיתה.
  8. כדי לסיים פונקציה מוטבעת דרוש סד מתולתל סגור ואילו מאקרו מסתיים עם תחילת קו חדש.
  9. ניפוי באגים הופך להיות קל לתפקוד inlne, כאשר הוא נבדק במהלך המהדורה לכל שגיאה. מצד שני, מאקרו לא נבדק תוך כדי אוספים, ולכן ניפוי מאקרו הופך להיות קשה.
  10. בהיותה פונקציה פונקציה מוטבעת מחייבת את חבריה בתוך סגר התחלה ומתולתל סגור. מצד שני, למאקרו אין שום סמל סיום כך שהכריכה מתקשה כאשר המאקרו מכיל יותר מהצהרות אחת.

מסקנות:

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