【问题标题】:How to #define __forceinline inline?如何#define __forceinline 内联?
【发布时间】:2012-02-12 10:39:02
【问题描述】:

我有一些 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++?

【问题讨论】:

  • 好像是这样的语法:__forceinline=inline

标签: gcc mingw inline redefinition


【解决方案1】:

语法是 __forceinline=inline,正如您在 cmets 中所指出的那样,因为这些设置会变成 -D options to GCC

请注意,inline 向 GCC 强烈暗示该函数应该被内联,但不保证它。 __forceinline 的 GCC 等价物是 always_inline attribute - 例如这段代码:

#define __forceinline __attribute__((always_inline))

或者等效地这个设置:

__forceinline="__attribute__((always_inline))"

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

【讨论】:

  • 虽然这是对原始问题的正确答案,但可能会注意到使用 __attribute(always_inline) 可能会给您带来编译器警告,例如“警告:always_inline 函数可能无法内联 [-Wattributes]”跨度>
猜你喜欢
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 2023-03-02
  • 2011-09-18
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多