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

时间:2011-03-20 16:47:38

标签: c inline c99

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

2 个答案:

答案 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();”在文件的顶部,你已经完成了设置。