0

使用 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;
}

如何在 gnu89中实现一个f()in like 的定义但使用 C99 模式?function.c

4

1 回答 1

2

您将内联定义放在头文件中,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;
}

有关C的更多信息,请参见http://www.greenend.org.uk/rjk/2003/03/inline.html 。inline

如果您真的想将所有定义(内联或非内联)保留在 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

没有经过大量测试,也不推荐。

于 2010-07-21T12:22:56.297 回答