对以下简化的cc -std=c99 example.c
文件执行example.c
:
inline void a()
{
}
int main()
{
a();
return 0;
}
得到我:
在函数`main'中:
example.c :(。text + 0x7):对'a'的未定义引用 collect2:ld返回1退出状态
据我了解,这与C99标准的要求有关,要求在无法内联的情况下使用的每个内联非静态函数的另一个定义?如果是这样的话,我猜我可以用static inline
替代,但我不想让它在以后咬我,那么这里最好的做法是什么呢?显然,我想坚持C99,我想内联一些功能。 (是的,我知道编译器通常知道什么内联而不被告知,但我有我的理由)
答案 0 :(得分:6)
使用-O2左右编译时,可能不会出现该错误。
内联函数定义应该放在头文件中,而extern inline
声明应该放在一个编译单元中。做
inline void a(void){
// empty
}
// in just one .c file
#include "the-file.h"
extern inline void a(void);
BTW,声明a
没有void
不是原型。
答案 1 :(得分:0)
没有函数原型,这就是全部,因此推断出函数签名,推断错误。添加“void a();”在文件的顶部,你已经完成了设置。