2014-07-14 12 views
20

Sto provando a compilare alcuni progetti open source utilizzando il compilatore c2 ++ c vs c. Il file è estensione .c. Il codice seguente restituisce alcuni errori (sotto). Tutto ciò può essere "riparato" semplicemente rimuovendo l'inline nella dichiarazione. Nota: non è una vera e propria funzione, proprio illustrativoimpossibile utilizzare in linea nella dichiarazione ottenere errore C2054

static inline int pthread_fetch_and_add(int *val, int add, int *mutex) 
{ 
    return 0; 
} 

errori errore C2054: previsto '(' seguire 'inline' errore C2085: 'pthread_fetch_and_add': non in elenco di parametri formali errore C2143: errore di sintassi: mancante ';'. prima di '{'

+2

VS non è un compilatore completamente conforme allo standard, quindi è molto probabile che sia necessario utilizzare la semplice "correzione" per rimuovere 'inline'. – dasblinkenlight

risposta

29

Usa __inline con MSVC

inline è una parola chiave C99 e C99 non è ancora (completamente) supportato con MSVC

.

"La parola chiave inline è disponibile solo in C++. Le parole chiave __inline e __forceinline sono disponibili sia in C che in C++. Per la compatibilità con le versioni precedenti, _inline è sinonimo di __inline "

Fonte:. http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx

+0

grazie, ho trascorso alcune ore su quello :-( – user3836754

+0

@ user3836754 siete i benvenuti – ouah

5

Una soluzione semplice è quella di -Dinline = __ in linea con il compilatore MSVC

2

ho incontrato lo stesso. . Invece di cambiare tema ogni inline-__inline, ho aggiunto il seguente prima che tutte le dichiarazioni di funzione:

#if defined(_MSC_VER) 
#define inline __inline 
#endif 

Ciò consentirebbe al codice originale di essere ancora compilato così com'è con un compilatore diverso (che presumibilmente non aveva le stesse limitazioni di quello VS).

Problemi correlati