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

Dmi*_*ank 0 c arm inline-functions keil

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

static inline int test(void)
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器的输出如下:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

oua*_*uah 5

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

Keil 文档明确说明inline在c90中没有:

内联关键字在C90中不可用.

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

  • @DmitryFrank您没有查看正确的PDF文档:您链接的是"ARM编译软件开发指南".PDF编译器文档是"armcc用户指南"http://infocenter.arm.com/help/topic/com.arm.doc.dui0472j/DUI0472J_armcc_user_guide.pdf (2认同)