2012-01-17 19 views
5

Ho un codice Microsoft (XLCALL.CPP) che sto cercando di compilare con CodeBlocks/MinGW.
A questa linea ottengo un errore di compilazione:Come #define __forceinline in linea?

__forceinline void FetchExcel12EntryPt(void) 

Questo è il messaggio di errore che ottengo:

XLCALL.CPP|36|error: expected constructor, destructor, or type conversion before 'void'

è previsto Questo errore, perché __forceinline è un'aggiunta specifica Microsoft per la lingua, non riconosciuto da GCC.

Quindi, per ottenere le cose compilare, cerco di aggiungere thiese definisce in CodeBlocks (Progetto Opzioni di creazione/impostazioni del compilatore/# definisce):

#define __forceinline inline 
#define __forceinline 

Tuttavia ancora ottengo lo stesso errore.

Se nella finestra di dialogo che non è necessario specificare il comando del preprocessore # define (es: __forceinline inline), questo è ciò che ottengo:

XLCALL.CPP|36|error: expected unqualified-id before numeric constant

C'è un modo per compilare un pezzo di codice, senza utilizzando Visual C++?

+0

Sembra che questa sia la sintassi: '__forceinline = inline' –

risposta

9

La sintassi è __forceinline=inline, come indicato nei commenti, perché queste impostazioni vengono trasformate in -D options to GCC.

Si noti che inline è un forte suggerimento per GCC che la funzione deve essere sottolineata, ma non lo garantisce. L'equivalente GCC di __forceinline è always_inline attribute - ad es. questo codice:

#define __forceinline __attribute__((always_inline)) 

o equivalentemente questa impostazione:

__forceinline="__attribute__((always_inline))" 

(Ma questo potrebbe anche essere inutile: se ci fosse qualche particolarmente buona ragione per forzare questa funzione da inline durante la compilazione con MSVC , questo motivo potrebbe non essere valido quando si utilizza un compilatore completamente diverso!)