5

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

__forceinline void FetchExcel12EntryPt(void)

这是我收到的错误消息:

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

预期会出现此错误,因为 __forceinline 是 Microsoft 对语言的特定补充,GCC 无法识别。

因此,为了编译,我尝试在 CodeBlocks(项目构建选项/编译器设置/#defines)中添加这些定义:

#define __forceinline inline
#define __forceinline 

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

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

XLCALL.CPP|36|错误:数字常量之前的预期不合格 ID

有没有办法在不使用Visual C++的情况下编译这样一段代码?

4

1 回答 1

11

__forceinline=inline正如您在评论中指出的那样,语法是,因为这些设置变成-D了 GCC 的选项

请注意,这inline是对 GCC 的一个强烈提示,即该函数应该被内联,但不保证它。GCC 的等价物__forceinlinealways_inline属性- 例如这段代码:

#define __forceinline __attribute__((always_inline))

或者等效地这个设置:

__forceinline="__attribute__((always_inline))"

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

于 2012-01-18T00:39:59.983 回答