2016-11-24 5 views
1

Ich habe einige Probleme mit hässlich geschriebenen alten C-Code. Ich möchte einen C++ - Compiler verwenden und Teile dieses alten Codes verwenden.Verwendung von (hässlichen) C-Code in C++ mit extern "C"

header.h

extern "C"{ 
int header(); 
} 

header.c

#include "header.h" 
int header(){ 
const int i=20; 
int *ptr = &i; 
} 

Dies kompiliert mit gcc (4.9.3) mit einer Warnung (ohne extern "C"), aber in g ++ gibt es der Fehler: "ungültige Konvertierung von 'const int *' zu 'int *' [-fpermissive]"

Ich bin nicht direkt an diesem Code interessiert, aber möchte wissen, ob es einen Weg gibt, irgendwelche funktionierenden C cod e Kompilieren mit einem C++ - Compiler? (dies ist nur ein Beispiel, was in C, aber nicht in C++ wie das eigentliche Problem mit gcc kompilieren, aber nicht mit g ++ „arbeitet“)

+2

"wenn es eine Möglichkeit gibt, funktionierenden C-Code mit einem C++ - Compiler zu kompilieren?" Nein, trotz des erklärten Ziels, C++ zu einem "besseren C" zu machen, haben die beiden ziemlich unterschiedliche Sprachen gefunden. – dasblinkenlight

+2

Versuchen Sie, es nicht schwerer zu machen, als es sein muss. Solange der C++ - Compiler die Deklaration der C-Funktion mit 'extern' C '' sieht, können Sie ihn mit einem C-Compiler kompilieren und der Linker wird gleichermaßen glücklich sein. –

+0

Dies ist sehr schlechter Code in beiden Sprachen. – Olaf

Antwort

4

Sie haben zwei Alternativen: alle Fehler

  1. Update, das sind nicht gültig C++ oder
  2. Compile C Dateien mit gcc, und verknüpfen sie mit C++ Dateien

extern "C" macht nur die C++ Compiler C-Funktionsnamen verwenden, wenn sie die Funktionen aufrufen wird. Wenn Sie diese Funktionen mit dem C++ - Compiler kompilieren, werden diese Funktionen nicht mit C-Regeln kompiliert.