Вы помещаете встроенное определение в файл заголовка без extern
и добавляете внешнее объявление / прототип в исходный файл:
/* share.h */
inline void f(void) {}
/* function.c */
#include "share.h"
extern void f(void);
/* main.c */
#include "share.h"
int main(int argc, char *argv[])
{
f();
return 0;
}
См. http://www.greenend.org.uk/rjk/2003/03/inline.html для получения дополнительной информации о inline
в C.
Если вы действительно хотите сохранить все свои определения (встроенные или нет) в function.c, как вы говорите:
/* share.h */
#define WANT_INLINE 1
#include "function.c"
/* function.c */
#ifdef WANT_INLINE
inline void f(void) {}
#else
#include "share.h"
extern void f(void);
#endif
Не проверено и не рекомендуется.