Funkcje inline a pliki nagłówkowe

Funkcje inline a pliki nagłówkowe
transient
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
  • Postów:24
0

Witam.

Zastanawiam się, jak to jest z funkcjami inline. Mianowicie, w przeciwieństwie do innych funkcji, kompilator potrzebuje znać jej definicje, a nie deklaracje, gdy napotka jej pierwsze wywołanie. Co za tym idzie, najlepiej, aby definicja funkcji inline albo znajdowała się na samej górze pliku, który kompilujemy, lub, jeżeli mamy projekt podzielony na kilka plików, to powinna znajdować się w pliku nagłówkowym, który będzie dołączony do każdego z tych plików. Moje pytanie brzmi - skoro ten plik nagłówkowy, który dołączamy do każdego pliku źródłowego naszego projektu, zawiera definicje tej funkcji, to czy to przypadkiem nie jest błąd? Bo o ile deklaracje funkcji/zmiennej powielać możemy, to przecież definicje nie bardzo, czyż nie?

Z góry dzięki za odpowiedź.
Pozdrawiam

edytowany 1x, ostatnio: transient
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
0

Nie, funkcje inline mogą się w plikach nagłówkowych znajdować. Tak samo jak te związane z szablonami.

M2
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:123
1

Cytat z książki "C++ Szkoła programowania" autorstwa "Stephen Prata" (Helion)

Kopiuj
 
Każda funkcja, której definicja znajduje się we wnętrzu deklaracji klasy, automatycznie staje się funkcją rozwijaną w miejscu wywołania. (...) W razie potrzeby można zdefiniować funkcję poza deklaracją klasy bez rezygnacji z cechy rozwijania miejscowego. Wystarczy uzupełnić definicję metody poza klasą słowem inline.

Specjalne reguły języka dla funkcji inline mówią, że funkcje te muszą być definiowane w każdym z plików, w których są wykorzystywane. Najprostszym sposobem zaspokojenia tego wymodu w programie składającym się z wielu plików jest umieszczenie w pliku nagłówkowym klasy również kompletu definicji metod oznaczonych jako inline.
transient
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
  • Postów:24
0

Czyli, suma sumarum, funkcja inline ma specjalne prawa - jej definicja może się powtórzyć. To właśnie chciałem usłyszeć :) Dziękuje serdecznie za pomoc!

Temat można zamknąć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.