Ho provato a cercare una buona risposta online ma non riescono a ottenerne una che possa comprendere appieno. Supponiamo che io sono un colpo di testa "add.h":Funzione inline nel file di intestazione in C
inline int add(int a, int b){ return a+b; }
un file chiamato "adddouble.c":
#include "add.h"
int adddouble(int a, int b){ return 2*add(a,b); }
un file chiamato "addsquare.c":
#include "add.h"
int addsquare(int a, int b){ return add(a,b)*add(a,b); }
Un file principale "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;
}
Io uso gcc5.2.0 per compilare quei file, ma ottenuto: "Simboli indefiniti per l'architettura x86_64:". Se aggiungo statico alla funzione inline in add.h o aggiungi dichiarazione "extern int add (int, int);" a "adddouble.c", compila correttamente senza errori. Sono nuovo alla funzione inline, non so come spiegare e capire questo comportamento. grazie
Quali sono le opzioni di costruzione? A meno che non si costruisca in C99 o C11 non c'è il concetto di una funzione inline in C. – StoryTeller
È necessario compilare il file di intestazione con gli altri file c o fornire sia .h che .c, add.h per il prototipo di add e Inserisci.c per il codice – qleguennec
+1 Buona domanda. In realtà si collega bene con g ++, ma non riesco a farlo funzionare con gcc (-std = c11). Questi simboli add sono indefiniti (U) sia in addquare.o che adddouble.c. g ++ invece crea simboli deboli (W) per la funzione add ed è per questo che si collega. – PSkocik