Prev Next Up Title Contents Index

Inline- funktiot


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 - malli inline-funktiosta

	/* 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).

Tehtävä 1.6 Miksi inline- funktio on parempi kuin makro?

Kerro miksi edellä inline- funktio on parempi kuin vastaava #define- makro?


Prev Next Up Title Contents Index