C 编译器无法识别\uu静态\u内联

C 编译器无法识别\uu静态\u内联,c,gcc,C,Gcc,我有一个C项目,使用ARM none eabi gcc编译器在ARM体系结构上运行,现在我正在尝试使用gnu99编译器在windows上以本机方式编译它,因为我需要进行单元测试,在实际硬件上很难做到这一点 然而,尽管我在makefile中包含了内联标志,编译器并没有重新编译静态内联命令,如下所示:CFLAGS+=-fgnu89 inline 下面是我得到的错误: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'voi

我有一个C项目,使用ARM none eabi gcc编译器在ARM体系结构上运行,现在我正在尝试使用gnu99编译器在windows上以本机方式编译它,因为我需要进行单元测试,在实际硬件上很难做到这一点

然而,尽管我在makefile中包含了内联标志,编译器并没有重新编译静态内联命令,如下所示:
CFLAGS+=-fgnu89 inline

下面是我得到的错误:

error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void' __STATIC_INLINE void

有人知道如何让编译器识别内联命令吗?

名称
\uu STATIC\u inline
不是标准C的一部分。您需要为其提供宏定义,或者您应该将
\uu STATIC\u INLINE
替换为
STATIC INLINE

我猜在某些头文件中有一行代码如下所示:

#define __STATIC_INLINE static inline
这种丑陋的黑客行为的动机是为了保持C99之前的兼容性。 基于您编译的平台,此定义可能会被删除。交叉编译器与PC平台


随着代码的发展,我将致力于消除这种类型的废话。

您是否使用类似IAR的工作台?它允许在Windows上进行模拟。所以相同的软件代码可以在IAR中编译。我不这么认为,因为我不知道它是什么。我现在将研究它。看看当前代码正在使用的头文件。这些文件很可能是gcc没有提供的特定于硬件的头文件。这是正确的,它们是一些特定于硬件的头文件,并且它们还使用一些特定于ARM的指令,例如SVCALL。为了单元测试的目的,我试图将它们隔离开来。IAR是否类似于模拟器/仿真器?是的。有一点学习曲线。但我看不出还有别的办法。您正在Windows上测试ARM上运行的代码。所以最好的办法就是带来类似的软手臂环境。否则,您必须重新定义所有这些您不想弄乱的宏。不幸的是,我不可能这样做,因为这些代码来自我使用的由Nordic Semiconductors设计的SDK库。对我来说,改变它并不容易,因为它存在于许多地方。正如我所说,你也可以为它提供一个宏观定义。您可以将
-D\uu STATIC\u INLINE='STATIC INLINE'
放在编译器选项中,或者在代码中找到适当的位置来编写
\define\uu STATIC\u INLINE STATIC INLINE
。您还可以使用
sed
在多个位置重复更改代码。如@DavidGrayson所述,添加编译器开关将需要最少数量的更改。CFLAG-D_ustatic_INLINE='STATIC INLINE'起作用,我不再收到该错误。谢谢你,我现在有很多其他人,但是我必须一个接一个地去尝试,或者可能使用Nguai al推荐的模拟器,这可能是一个更好的选择。正如现在我得到其他错误。谢谢你的帮助。我很感激。确实有一个定义,正如你所说的,但是它来自我使用的SDK库。因此,我不能简单地删除它,因为它存在于许多不同的文件中