2014-07-14 6 views
20

Ich versuche, einige Open Source-Projekte mit dem vs2013 c/C++ - Compiler zu kompilieren. Die Datei ist die Erweiterung .c. Der folgende Code gibt einige Fehler zurück (unten). All das kann "repariert" werden, indem einfach das Inline in der Deklaration entfernt wird. Hinweis: keine wirkliche Funktion, nur illustrativnicht inline in der Deklaration verwenden können, erhalten Fehler C2054

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

Fehler Fehler C2054: erwartete '(' folgen 'inline' Fehler C2085: 'pthread_fetch_and_add': nicht in der formalen Parameterliste Fehler C2143: Syntaxfehler: fehlt ';'., bevor '{'

+2

VS ist kein vollständig standardkonformer Compiler, daher besteht eine gute Chance, dass Sie Ihre einfache "Korrektur" zum Entfernen von "inline" verwenden müssen. – dasblinkenlight

Antwort

29

Verwenden __inline mit MSVC

inline ist ein C99-C99-Schlüsselwort und noch nicht (vollständig) mit MSVC unterstützt

.

"Das Inline-Schlüsselwort ist nur in C++ verfügbar. Die Schlüsselwörter __inline und __forceinline sind in C und C++ verfügbar. Für die Kompatibilität mit früheren Versionen ist _inline ein Synonym für __inline“

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

+0

danke, ich habe ein paar Stunden damit verbracht :-( – user3836754

+0

@ user3836754 du bist willkommen – ouah

5

Eine einfache Abhilfe = __ inline mit dem MSVC Compiler zu -Dinline ist

2

ich in die gleiche lief. . Ausgabe statt, bevor alle alle inline-__inline, habe ich die folgende Veränderung der Funktionsdeklarationen:

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

Dies würde ermöglichen, dass der ursprüngliche Code immer noch so wie er ist mit einem anderen Compiler kompiliert wird (der vermutlich nicht dieselben Einschränkungen wie der VS hatte).

Verwandte Themen