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