我想为我的函数编写不同的实现,inline
有些不是。因此,我想将函数声明为:
// MyHeader.h
int myFunc(void);
#if DO_INLINE
static inline int myFunc(void) { return 42; }
#endif
然后还有:
// MySource.c
#if !DO_INLINE
#include "myHeader.h"
int myFunc(void) { return 42; }
#endif
我将DO_INLINE
在编译时指定。
MSVC 对此没有任何问题,但 GCC (4.1.1) 抱怨说我在声明一个静态函数后声明它是非静态的。如果我从多个编译单元中删除static
限定符,它将抱怨多个定义。#include "MyHeader.h"
(好像inline
函数是extern
。)我不太明白为什么编译器会出现这个问题。
我认为这应该是非常明显和明确的:
int myFunc(void);
static inline int myFunc(void) { return 42; }
它不应该要求声明是static
.
也就是说,我正在努力避免解决我的问题:
#if DO_INLINE
#define MAYBE_STATIC static
#else
#define MAYBE_STATIC
#endif
MAYBE_STATIC int myFunc(void);
编辑:这是一个更现实的用例:http ://codepad.org/OkC0Su3v