【问题标题】:Keil ARM C compiler: troubles with inline functionsKeil ARM C 编译器:内联函数的麻烦
【发布时间】:2015-01-10 01:11:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: c arm keil inline-functions


    【解决方案1】:

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

    Keil documentation 明确表示 inline 在 c90 中不可用:

    inline 关键字在 C90 中不可用。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 2015-10-07
    • 2011-12-23
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多