Próbowałem wyszukać dobrą odpowiedź w Internecie, ale nie udało mi się uzyskać takiej, którą mogę w pełni zrozumieć. Załóżmy, że mam nagłówka "add.h":Funkcja Inline w pliku nagłówkowym w C
inline int add(int a, int b){ return a+b; }
plik o nazwie "adddouble.c":
#include "add.h"
int adddouble(int a, int b){ return 2*add(a,b); }
plik o nazwie "addsquare.c":
#include "add.h"
int addsquare(int a, int b){ return add(a,b)*add(a,b); }
Główny plik "main.c":
#include<stdio.h>
int adddouble(int, int);
int addsquare(int, int);
int main(){
printf("add double = %d\n", adddouble(10,20));
printf("add square = %d\n", addsquare(10,20));
return 0;
}
Używam gcc5.2.0 do kompilowania tych plików, ale otrzymałem: "Niezdefiniowane symbole dla architektury x86_64:". Jeśli dodaję statyczne do funkcji inline w add.h lub dodaj deklarację "extern int add (int, int);" do "adddouble.c", pomyślnie kompiluje bez błędów. Jestem nowy w funkcji inline, nie wiem jak wyjaśnić i zrozumieć to zachowanie. Dzięki
Jakie są Twoje opcje kompilacji? Dopóki nie zbudujesz C99 lub C11, nie ma koncepcji funkcji inline w C. – StoryTeller
Musisz skompilować plik nagłówkowy z innymi plikami c lub dostarczyć zarówno .h jak i .c, add.h dla prototypu dodawania i Dodaj.c dla kodu – qleguennec
+1 Dobre pytanie. Właściwie łączy się dobrze z g ++, ale nie mogę go uruchomić z gcc (-std = c11). Te symbole dodawania są niezdefiniowane (U) w obu addquare.o i adddouble.c. g ++ zamiast tego tworzy słabe symbole (W) dla funkcji dodawania i dlatego to łączy. – PSkocik