Keil ARM C编译器:内联函数的麻烦

时间:2014-11-13 00:58:59

标签: c arm keil inline-functions

我正在将实时内核TNeoKernel移植到Cortex-M架构,所以我安装了Keil并尝试构建内核。但是,我遇到了意想不到的问题:编译器似乎无法处理inline函数。这是简单的代码:

static inline int test(void)
{
   return 0;
}

编译器的输出如下:

src\appl\main.c(17): warning:  #260-D: explicit type is missing ("int" assumed)
  static inline int test(void)
src\appl\main.c(17): error:  #65: expected a ";"
  static inline int test(void)

如果我删除inline关键字,则会编译并运行。

在ARM编译器的文档中,我找不到任何关于inline函数的信息。因此,只是为了确保:ARM编译器是否真的不支持inline关键字?这太难以置信了所以我决定问。

我在内核的平台无关代码中有很多static inline函数,那么,它支持ARM编译器的最佳方法是什么?在我的头脑中,我只有两个想法:

  • 创建依赖于体系结构的宏,如TN_INLINE,对于ARM编译器,它应该扩展为空;
  • 将非常小的1行函数转换为宏。

1 个答案:

答案 0 :(得分:5)

inline关键字已在c99中引入,但由default Keil ARM C编译器以c89 / c90模式编译。

Keil documentation明确表示c90中不提供inline

  

inline关键字在C90中不可用。

Keil ARM C编译器也支持c99。在c90模式下,使用--c99编译器选项切换到c99模式或尝试使用__inline扩展名关键字: