0

我正在将实时内核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 Compiler 的文档中,我找不到任何关于inline函数的信息。所以,只是为了确保:inlineARM 编译器真的不支持关键字吗?太不可思议了,所以我决定问问。

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

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

1 回答 1

5

inline关键字已在 c99 中引入,但默认情况下Keil ARM C 编译器以 c89/c90 模式编译。

Keil文档明确指出,这inline在 c90 中不可用:

inline 关键字在 C90 中不可用。

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

于 2014-11-13T01:26:25.687 回答