Как реализовать и поделиться встроенной функцией с помощью C99? - PullRequest
0 голосов
/ 20 июля 2010

С gnu89:

/* share.h */
extern inline void f (void);
/* function.c */
void f (void) {}
/* main.c */
#include "share.h"
int main (int argc, char **argv) {
    f ();
    return 0;
}

С C99:

/* share.h */
static inline void f (void) {}
/* main.c */
#include "share.h"
int main (int argc, char **argv) {
    f ();
    return 0;
}

Как реализовать одно определение f() в function.c, как в gnu89, но в режиме C99?

1 Ответ

2 голосов
/ 21 июля 2010

Вы помещаете встроенное определение в файл заголовка без 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

Не проверено и не рекомендуется.

...