Programowanie w języku C/C++

Inline

  • 2007-06-08 19:31
  • 5 komentarzy
  • 1324 odsłony
  • Oceń ten tekst jako pierwszy
Inline to nic innego jak atrybut, który stawiamy przed definicją funkcji. Co daje nam ten atrybut? Ano właśnie, ogólnie chodzi o to, że kompilator w trakcie interpretacji kodu, umieszcza (nie zawsze) ciało funkcji (opatrzonej atrybutem inline) w miejscu jej wywołania. Napisałem to w cudzysłowie, ponieważ nie dochodzi do żadnego wywołania. Dzięki temu, że kompilator wstawia w to miejsce ciało funkcji, nie mają miejsca akcje związane wywołaniem i powrotem z funkcji. W rezultacie dany kod będzie wykonywany szybciej. Nie ma jednak sensu używanie tego atrybutu w funkcjach, w których wykonywane są złożone, długotrwałe operacje lub pętle wykonujące się większą ilość razy, gdyż na nic zda się taka oszczędność czasu procesora. W ogólności panuje stwierdzenie, że nie powinno się w funkcjach tego typu stosować słów kluczowych takich jak: do, while, for, goto, switch, case, break, continue. Dodam jeszcze, że podczas debugowania funkcja nie będzie typu inline.
A oto przykład:

inline int  suma(int a, int b){
  return a + b;
}
 
int main(){
  cout << suma(5,10) << endl;
 
  return 0;
}

5 komentarzy

marcinEc 2006-04-22 15:01

inline NIE MUSI umieszczać funkcji w miejscu wywołania:
(...)
A function declaration (8.3.5, 9.3, 11.4) with an inline specifier declares an inline function. The inline specifier indicates to the implementation that inline substitution of the function body at the point of call is
to be preferred to the usual function call mechanism. An implementation is not required to perform this inline substitution at the point of call; however, even if this inline substitution is omitted, the other rules for
inline functions defined by 7.1.2 shall still be respected.
(...)

tharos 2006-02-22 13:09

Nie chcialem miesac cudzych artów, ale ok w przyszlosci bede poprawial  :P

Coldpeer 2006-02-21 21:59

tharos: a nie mogłeś sam wyedytować? ;)

czarownik 2006-02-21 21:42

sorki... kursor musiał mi przeskoczyc :|

tharos 2006-02-21 21:38

Daj przyklad w znacznikach cpp :P