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

int Squ(short a)
{
 return a*a;
}

int ExpEql(int b, int c)
{
 while (b < c)
   b = Squ(b);
 return b;
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

המחשב מריץ את הפונקציה ExpEql. בשורת הקוד בה נקראת הפונקציה Squ הוא מבצע עבודה מקדימה, מריץ את הפונקציה Squ וחוזר לאחר סיומה לשורת הקוד הבאה לאחר הקריאה בפונקציה ExpEql. וכך קורא בכל פעם שבה נקראת הפונקציה.
אמנם העבודה המקדימה אינה רבה, אך לעיתים בכל זאת תרצה להתחמק ממנה, וזאת מכיוון שבפונקציות קצרות במיוחד זמן הריצה של העבודה המקדימה עלול להיות ארוך מאד ביחס לזמן הביצוע של הפונקציה עצמה.
בנוסף לעבודה המקדימה, קפיצה לפונקציה אחרת דורשת זמן נוסף, מכיוון שפעמים רבות היא מתבטאת בקפיצה לאזור קוד שונה, ואז למחשב לוקח זמן רב יותר לגשת לאזור זיכרון בדיסק שעימו עוד לא עבדנו.
ב-C פתרנו את הבעיה ע"י שימוש במאקרו (#define), בדוגמא זו יכולנו להגדיר מאקרו במקום הפונקציה Squ, בצורה הבאה:

#define Squ(a) a*a
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

אך למרות שהעבודה המקדימה נחסכת, המאקרו משאיר פתח לבעיות רבות אחרות כמו אי-בדיקת טיפוס המשתנה הנשלח אל המאקרו, קושי בכתיבת קוד מסודר בפקודת define ותופעות לוואי.
במקרה זה שורת הקוד:

Squ(3+4);
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

תביא לתוצאה שגויה.
לכן ב-C++, התווסף פתרון חדש לטיפול בבעיה זו, הגדרת הפונקציה כ-inline.
במקרה כזה, המחשב יכניס העתק שלם של הפונקציה בתוכנית, בכל מקום שבו היא נקראת,. ואז, בעת ההרצה, המחשב יריץ את הפונקציה באותה דרך בה הוא מריץ את שאר התוכנית, ללא עבודה מקדימה לפני הרצתה.
לגישה זו יש חיסרון אחד, בכל מקום בה נקראת פונקצית ה-inline, יישתל העתק שלה בקוד בעת ההידור. דבר זה דורש יותר זיכרון ויותר מקום בדיסק עבור התוכנית, אבל מצד שני, חוסך מהתוכנית מלעשות עוד פעולות בזמן שהפונקציה נקראת, כלומר, חיסכון בזמן ריצה.
אז איך מגדירים את הפונקציה כ-inline?
יש שני דברים שעליך לעשות: יש להוסיף את המילה inline בהכרזת הפונקציה, בהגדרת הפונקציה, או בשתיהן. לדוגמא:
inline int Squ(short a);

int Squ(short a)
{
 return a*a;
}
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

והדבר השני הוא שפונקציות inline יש לממש באותו הקובץ שבו עושים בהן שימוש. במידה ותרצה להשתמש באותה פונקצית inline במספר קבצים, שים את הפונקציה בקובץ header וכלול אותו בכל הקבצים המשתמשים בפונקציה.