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

在以下简化的example.c文件上执行cc -std=c99 example.c

 inline void a() { } int main() { a(); return 0; } 

得到我:

在函数`main’中:
example.c :(。text + 0x7):对’a’的未定义引用
collect2:ld返回1退出状态

据我所知,这与C99标准的要求有关,要求在无法内联的情况下使用的每个内联非静态函数的另一个定义? 如果是这样的话,我猜我可以用static inline代替,但我不想让它在以后咬我,那么这里最好的做法是什么呢? 显然,我想坚持C99,我想内联一些function。 (是的,我知道编译器通常知道内联的内容而不被告知,但我有我的理由)

使用-O2左右编译时,可能不会出现该错误。

内联函数定义应该放在头文件中, extern inline 声明应该放在一个编译单元中。 做

 inline void a(void){ // empty } // in just one .c file #include "the-file.h" extern inline void a(void); 

BTW,声明无void不是原型。

没有函数原型,这就是全部,因此推断出函数签名,推断错误。 添加“void a();” 在文件的顶部,你已经设置好了。