inline a wartosc zwracana przez funkcje

0

Czemu funkcji inline nie musi zwracac wartosci tzn.

inline int ff()
{
}

ten kod jest poprawny, podczas gdy funkcja 'zwykla' MUSI zawierac 'return costam'.

ten kod nie skompiluje sie w VC++2003

int ff()
{
}

Jest w tym jakis glebszy sens czy moze jest to blad kompilatora?

0

Z tego co pamiętam fukcja inline działa tak, że w każdym miejscu jej wystąpienia zastępowana jest ona swoim kodem a zatem po prostu w miesjce wywołania funkcji wstawiony jest blok instrukcji.

Poza tym pomicięcie instrukcji return to jeden z perków funkcji inline - są dzięki temu szybsze...

Pozdrawiam,

0

w zasadzie modyfikator 'inline' nie oznacza do końca, że dana funkcja zostanie wklejona w miejscu jej wywołania, lecz sugeruje kompilatorowi uczynienie czegoś takiego (nie ma żadnych gwarancji że tak się stanie) - może w Microsoftowym kompilatorze jest inaczej - trzeba by się w dokumentacji zagłębić.

0

stara nalecialosc w jezyku: jesli pominiesz return, to zwracane jest blizej nie wiadomo co (doslownie: aktualna wartosc z rejestru EAX, a co w nim ostatnio bylo? nikt nie wie:) ). generalnie jest to blad i MSVC dobrze robi zglaszajac blad. G++ rowniez zwraca, ale warning:

-sh-3.00# cat x.cpp
#include <iostream>

inline int ff()
{}

int main()
{ ff();
}
-sh-3.00# g++ -Wall -ansi --pedantic x.cpp
x.cpp: In function `int ff()':
x.cpp warning: no return statement in function returning non-void
x.cpp warning: control reaches end of non-void function

1 użytkowników online, w tym zalogowanych: 0, gości: 1