43 Stimmen

Welche Probleme kann ich beim Kompilieren von C-Code mit einem C++-Compiler erwarten?

Wenn Sie eine vorhandene C-Code-Basis übernehmen und mit einem C++-Compiler kompilieren, mit welchen Problemen können Sie rechnen? Zum Beispiel glaube ich, dass das Zuweisen eines Ganzzahlenwerts mit einem aufgezählten Typ in C++ fehlschlagen wird, während es in C legal ist (wenn auch etwas unangenehm).

Wenn ich nicht alle meine C-Dateien in extern C { ... } einhülle, werde ich dann Namensverwirrung bekommen, wo ich es am wenigsten erwarte? Gibt es einen Grund, warum ich das wirklich nicht tun sollte?

Zur Information: Wir haben eine sehr große Code-Basis in C geschrieben. Seit einigen Jahren springen wir durch Reifen, um Dinge zu tun, die über C++ (zum Beispiel selbstgebundene Vererbung) auf natürliche Weise möglich wären. Wir möchten langsam auf C++ umsteigen; indem wir unser CORBA-ähnliches Framework unterstützen und Module umgestalten, um den natürlicheren Ansatz von C++ nutzen zu können, während wir vorankommen.

2voto

paulm Punkte 5358

Ich habe das bereits zuvor mit MSVC gemacht, wenn Sie MSVC verwenden, ist eine gute Strategie:

  1. Setzen Sie einzelne Dateien zum Kompilieren als CPP, so können Sie schrittweise zu einem CPP Compiler wechseln.
  2. Arbeiten Sie sich Datei für Datei durch, indem Sie ctrl+f7 verwenden, um nur diese eine Datei zu kompilieren.
  3. Anstatt alle mallocs zu casten, können Sie stattdessen eine Template-Version erstellen

foo = (Foo*)malloc(sizeof(*foo));

wird zu

foo = malloc();

Und natürlich können Sie eine Überladung für die Fälle haben, in denen Sie ein Foo+n Bytes möchten

Ich würde auch empfehlen, die Speicherzuweisungen nach Möglichkeit auf RAII umzustellen, ich habe festgestellt, dass einige Funktionen ziemlich komplex waren, daher war der Wechsel zu RAII zu risikoreich, für den Großteil war es jedoch einfach genug zu tun.

1voto

user253751 Punkte 49246

C++ hat eine strengere Typenüberprüfung, daher müssen Sie möglicherweise einen Cast zu jedem Aufruf von malloc/realloc/calloc hinzufügen.

-2voto

Dimitrie D. Punkte 27

Versuchen Sie, mit einem C++-Compiler zu kompilieren:

typedef enum{ false = 0, true = 1} bool;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X