Wpis z mikrobloga

Mirki od języka C co ma dawać specyfikator

inline

przed deklaracją funkcji w pliku nagłówkowym?
Bo mam jakiś kod po lepszym lub gorszym januszu i on zrobił coś takiego:
w plikach .h;

inline void AT91F_PDC_DisableAndResetRx( AT91PS_PDC pPDC );


w plikach .c;

inline void AT91F_PDC_DisableAndResetRx( AT91PS_PDC pPDC ){ .... }


i wykrzacza się to przy linkowaniu

undefined reference to AT91FPDCDisableAndResetRx

oraz warning

function declared but never defined


Jak wywalę tego inline'a z nagłówka, to się kompiluje i linkuje normalnie, pytanie co autor miał na myśli tak robiąc?
Moim zdaniem wystarczy ten jeden inline w pliku .c, może się jednak mylę

#programowanie #kiciochpyta
  • 8
  • Odpowiedz
@QBA__: Mistrzem Cpp nie jestem, ale czy nie powinieneś zaimplementować funkcji inline w pliku nagłówkowym. W końcu kompilator nie wstawia referencji do funkcji, tylko robi kompilatorową copy-pastę.
  • Odpowiedz
Jeśli się nie mylę to działa to tak, że inline pozwala wrzucić ciało funkcji w miejscu jej wywołania. Decyzja należy do kompilatora, więc jeśli stwierdzi że funkcja jest wystarczająco mała to to robi. Wykrzaczenie jest spowodowane tym, że pojedyncza jednostka kompilacji widziała deklarację funkcji inline, ale ciało zawierało się w pliku *.c który nie był zaincludowany. Funkcje inline powinny mieć swoje ciało bezpośrednio w pliku h.
  • Odpowiedz
niby przyśpiesza działania programu, operacji, bo fizycznie wkleja tą procedurę w mijesu jej wystapienia a nie odwołuje się do niej....


@Kopytko1: do czego służy sam inline to wiem, nie wiedziałem dlaczego gość stosował ten specyfikator 2 razy, ale wydaje mi się że odpowiedź mirka @chudzielec: jest wystarczająca
  • Odpowiedz