Как #define __forceinline встроить? - PullRequest
5 голосов
/ 17 января 2012

У меня есть некоторый код Microsoft (XLCALL.CPP), который я пытаюсь скомпилировать с помощью CodeBlocks / MinGW.
В этой строке я получаю ошибку времени компиляции:

__forceinline void FetchExcel12EntryPt(void)

Это ошибкаполученное сообщение:

XLCALL.CPP | 36 | ошибка: ожидаемый конструктор, деструктор или преобразование типа до 'void'

Эта ошибка ожидается, потому что __forceinline isспецифичное для Microsoft дополнение к языку, не распознаваемое GCC.

Итак, для компиляции я попытаюсь добавить эти определения в CodeBlocks (параметры сборки проекта / настройки компилятора / # определения):

#define __forceinline inline
#define __forceinline 

Однако я все еще получаю ту же ошибку.

Если в диалоговом окне я не указываю команду препроцессора #define (т.е.: __forceinline inline), это то, что я получаю:

XLCALL.CPP | 36 | ошибка: ожидаемый неквалифицированный идентификатор перед числовой константой

Есть ли способ скомпилировать такой кусок кода, без использования VisualC ++?

1 Ответ

11 голосов
/ 18 января 2012

Синтаксис __forceinline=inline, как вы отметили в комментариях, потому что эти настройки превращаются в -D опции для GCC .

Обратите внимание, что inline является сильным намеком на GCC, что функция должна быть встроенной, но не гарантирует ее. Эквивалент __forceinline GCC является атрибутом always_inline - например, этот код:

#define __forceinline __attribute__((always_inline))

или эквивалентно этому параметру:

__forceinline="__attribute__((always_inline))"

(Но это вполне может быть ненужным: если бы была какая-то особенно веская причина для принудительного включения этой функции при компиляции с MSVC, эта причина может быть недопустимой при использовании совершенно другого компилятора! )

...