2012-11-26 6 views
7

Ich muss einige Header einfügen, die ursprünglich in C in einem C++ - Projekt geschrieben wurden. In den Header-Dateien wird verwendet, was zu einem Syntaxfehler für C++ führt.Makro zum Entfernen des Schlüsselwortes `restrict` beim Kompilieren mit C++

Ich bin auf der Suche nach einem Präprozessor-Makro, das überprüft, ob ich mit einem C++ - Compiler kompiliere und in diesem Fall das Schlüsselwort restrict entfernt.

Antwort

10
#ifdef __cplusplus 
#define restrict 
#endif 

sollte es tun. restrict ist kein Schlüsselwort in C++, also #define es ist nichts unproblematisch dort.

Oder, wie Arne Mertz vorgeschlagen, noch besser, haben

extern "C" { 
#define restrict 
// include C headers here 
#undef restrict 
} 

, wo Sie die C-Header in C++ Quelle umfassen.

+1

das Definieren von 'restrict' auf nichts wäre auch in C zulässig (da der Präprozessor die Quelle transformiert, bevor der C-Compiler es sieht), aber das wäre nicht beabsichtigt. –

+0

@AlexeyFeldgendler deshalb ist es mit '#ifdef __cplusplus' verpackt ... – SomeWittyUsername

+3

wenn Sie die' # define' in den C++ - Code setzen, bevor Sie die C-Header (zusammen mit dem 'extern 'C'' Sie werden brauchen), brauchen Sie nicht einmal das '# ifdef/# endif'. Versuchen Sie minimal invasiv zu sein, dh ändern Sie Ihren C-Code nicht, weil jemand versuchen könnte, die Lib in C++ zu verwenden. Ändern Sie stattdessen den C++ - Code. –

Verwandte Themen