C- kielessä makrot oli ainoa tapa kirjoittaa ohjelmakoodia, jossa käännöksessä funktion kutsu varmasti jätetään pois ja kutsukohtaan kopioidaan funktion runko. Optimoiva kääntäjä saattaa kuitenkin tehdä tämän.
C++ -kielessä funktion esittelyn eteen voidaan lisätä sana inline, jolloin pyydetään, että käännöksessä funktion runko kopioidaan kutsun tilalle (kääntäjän ei tosin ole pakko uskoa tätä pyyntöä). C- kielen makroon verrattuna etu on kuitenkin se, että mahdolliset sivuvaikutukset jäävät pienemmiksi:
/* INLINE.CPP */
#include <stdio.h>
#define NELIO(a) ( (a) * (a) )
inline int nelio(int d)
{
return d*d;
}
int main(void)
{
int dm=2,di=2, d2m, d2i;
d2m = NELIO(++dm); // Yhyy!
d2i = nelio(++di);
printf("Makro: %3d %3d\n",dm,d2m);
printf("Inline: %3d %3d\n",di,d2i);
return 0;
}
Tietenkin makron eduksi jää vielä se, että se ei
välitä parametrien tyypeistä. C++:ssahan tämä
tietysti voidaan kiertää määrittelemällä useita
eri inline -funktioita. Näitä
määriteltäessä makrot saattavat jälleen osoittautua
käteviksi kirjoituksen lyhentäjiksi!Kaikkia funktioita ei aina toteuteta inlinena. Usein esimerkiksi silmukat ja monimutkaiset ehtorakenteet on kielletty. Tämä saattaa osittain olla kääntäjäriippuvaista.
Inline -funktioita voidaan esitellä myös toisella tavalla: kirjoitetaan funktio luokan sisään (ks. Tietueessa funktioita).