我正在将实时内核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编译器,它应该扩展为空; 答案 0 :(得分:5)
inline
关键字已在c99中引入,但由default Keil ARM C编译器以c89 / c90模式编译。
Keil documentation明确表示c90中不提供inline
:
inline关键字在C90中不可用。
Keil ARM C编译器也支持c99。在c90模式下,使用--c99
编译器选项切换到c99模式或尝试使用__inline
扩展名关键字: