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のようにC99モードを使用してinf()の1つの定義を実装するにはどうすればよいですか?function.c

4

1 に答える 1

2

インライン定義をヘッダーファイルなしで配置externし、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 に答える