如何在C99中正确内联和使用内联函数?(构建失败)

amn*_*amn 7 c inline c99

执行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,我想内联一些功能.(是的,我知道编译器通常知道什么内联而不被告知,但我有我的理由)

Jen*_*edt 6

使用-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不是原型.


Ern*_*ill 0

没有函数原型,仅此而已,因此函数签名被推断出来,并且推断错误。添加“void a();” 到文件顶部,一切就完成了。