5

CodeBlocks/MinGW でコンパイルしようとしている Microsoft コード (XLCALL.CPP) があります。
この行で、コンパイル時エラーが発生します。

__forceinline void FetchExcel12EntryPt(void)

これは私が得るエラーメッセージです:

XLCALL.CPP|36|エラー: 'void' の前にコンストラクタ、デストラクタ、または型変換が必要です

__forceinline は Microsoft 固有の言語への追加であり、GCC では認識されないため、このエラーは予期されたものです。

したがって、物事をコンパイルするために、これらの定義を CodeBlocks に追加しようとします (Project Build Options/Compiler Settings/#defines):

#define __forceinline inline
#define __forceinline 

ただし、それでも同じエラーが発生します。

__forceinline inlineダイアログで #define プリプロセッサ コマンド (つまり: ) を指定しないと、次のようになります。

XLCALL.CPP|36|エラー: 数値定数の前に修飾されていない ID が必要です

Visual C++を使用せずに、このようなコードをコンパイルする方法はありますか?

4

1 に答える 1

11

__forceinline=inlineコメントで指摘したように、これらの設定は-DGCC のオプションに変換されるため、構文はです。

inlineこれは、関数をインライン化する必要があるという GCC への強力なヒントですが、それを保証するものではないことに注意してください。に相当する GCC__forceinlinealways_inline属性です。たとえば、次のコードです。

#define __forceinline __attribute__((always_inline))

または同等にこの設定:

__forceinline="__attribute__((always_inline))"

(しかし、これは不要かもしれません。MSVC でコンパイルするときにこの関数を強制的にインライン化する特に正当な理由がある場合、その理由は、まったく異なるコンパイラを使用する場合には当てはまらない可能性があります!)

于 2012-01-18T00:39:59.983 に答える