如何#define __forceinline内联?

时间:2012-01-17 16:03:57

标签: gcc mingw inline redefinition

我有一些Microsoft代码(XLCALL.CPP),我试图用CodeBlocks / MinGW编译。
在这一行,我得到一个编译时错误:

__forceinline void FetchExcel12EntryPt(void)

这是我收到的错误消息:

  

XLCALL.CPP | 36 |错误:预期的构造函数,析构函数或类型   'void'之前的转换

预计会出现此错误,因为__forceinline是Microsoft特定的语言补充,但未被GCC识别。

所以,为了编译,我尝试在CodeBlocks中添加thiese定义(项目构建选项/编译器设置/ #define):

#define __forceinline inline
#define __forceinline 

但是我仍然得到同样的错误。

如果在对话框中我没有指定#define预处理器命令(即:__forceinline inline),这就是我得到的:

  

XLCALL.CPP | 36 |错误:数字常量之前的预期unqualified-id

有没有办法编译这样的代码而不使用 Visual C ++?

1 个答案:

答案 0 :(得分:11)

语法为__forceinline=inline,正如您在评论中所述,因为这些设置已变为-D options to GCC

请注意,inline强烈暗示GCC应该内联函数,但不保证。 GCC等效__forceinlinealways_inline attribute - 例如这段代码:

#define __forceinline __attribute__((always_inline))

或等效此设置:

__forceinline="__attribute__((always_inline))"

(但这可能是不必要的:如果在使用MSVC编译时强制这个函数被内联时有一些特别好的理由,那么当使用完全不同的编译器时,这个原因可能无效!)