[C++] Funkcja inline - deklaracja a definicja

Siemka.

Czytam sobie właśnie Symfonię pana Grębosza i jestem przy opisie funkcji typu inline. Jest tam napisane, że funkcji takich nie deklaruje się - ale od razu definiuje. Jednak w google znalazłem przykłady z deklaracją i osobną definicją - i kod kompilował się na GNU GCC. Czyli w książce wystąpił błąd.

I mam jeszcze drugie pytanie. Jeżeli zastosujemy ten zapis z osobną deklaracją i definicją - to nie ma rygorystycznych zasad mówiących gdzie ma wystąpić, a gdzie nie słówko inline, prawda ? Ważne, żeby wystąpiło choć raz. Czyli wszystkie poniższe kody są równoważne ?

inline void fun();


int main() { }


inline void fun() { }

void fun();


int main() { }


inline void fun() { }

inline void fun();


int main() { }


void fun() { }

Z góry thx za pomoc :wink:

Wątpie. Oczywiście wiesz, że GCC zupełnie ignoruje atrybut inline jeśli nie włączysz my jakiejś optymalizacji np “-O2” ? A wtedy gdy dodasz opcję "-Winline " otrzymasz taki komunikat błędu:

Jeśli kompilator ma zastąpić wywołanie funkcji bezpośrednim umieszczeniem kodu funkcji w miejscu wywołania to chyba oczywiste, że musi znać ten kod?

Hmm, włączyłem “-O2” i “-W” oraz “-Wall”, bo nie miałem nigdzie “-Winline”, ale warningu dalej nie pokazuje o tym, że i tak funkcja bedzie kompilowana “outline”, bo definicja jest po wystąpieniu wywołania…