Suche guten Tipp um C-Code in CPP zu wandeln...
-
Hallo zusammen,
zwar habe ich jede Menge OO-Erfahrung, aber nur 100%ige, also nicht Cpp, sondern Java und ähnliche, wo nicht so stark vermengt wird, bzw. die Hardware-ebene völlig fehlt.
Was ich suche ist somit so eine Art Einweisung oder Tutorial in die Herangehensweise:
Ich möchte möglichst zeitsparend (effizient) vorhandene C-Projekte in Cpp überführen, muß also nach irgendeinem Schema die Sourcen analysieren, um dann auf die passende Objekt-Struktur zu kommen.
Im Schrank habe ich natürlich die klassischen C/C++/OO Bücher stehen, jedoch bietet keines davon einen Anhalt für meine Problematik.Habt ihr mir da etwas?
-
Die Denkweise ist in OO-Sprachen ganz anders als in prozeduralen Sprachen. Ein einfaches ersetzen ist deshalb bei einem größerem Projekt IMHO nicht ohne weiteres möglich. (Ich gehe davon aus, dass dein C-Programm nicht objektorientiert geschrieben ist).
Da wirst du dir vermutlich schon größere Gedanken machen müssen, wenn du es wirklich sauber machen willst. Oder du übersetzt es halt einfach und nutzt dabei ein paar fortschrittlichere Sprachmerkmale von C++ aus (du willst ja zeitsparend arbeiten).
-
Optimizer schrieb:
Die Denkweise ist in OO-Sprachen ganz anders als in prozeduralen Sprachen. Ein einfaches ersetzen ist deshalb bei einem größerem Projekt IMHO nicht ohne weiteres möglich.
Das ist mir schon klar, sonst hätte ich ja auch nicht gefragt. Ich kann mir nur nicht vorstellen, das ich der erste bin, der sich dieser Problematik stellen muß. Daher dachte ich, ich frage mal nach Erfahrungswerten.
Trotzdem danke. Notfalls muß ich wohl das ganze dann neu designen und nur noch code-Schnipsel aus dem Original einfügen...
-
wenn ich es richtig verstehe, möchtest du fertige c module nochmal umdesignen?
lohnt sich denn der aufwand? was ist falsch an den c modulen?
ummantel doch die fertigen module und nutze sie. neu designen ist ein völlig neues programm. nach kosten nutzen rechnung sicher nicht effizient, da der aufwand ein vielfaches wäre.
gut, aber ich kenne die vorraussetzungen nicht und die anforderungen...
-
zwar habe ich jede Menge OO-Erfahrung, aber nur 100%ige, also nicht Cpp, sondern Java und ähnliche, wo nicht so stark vermengt wird, bzw. die Hardware-ebene völlig fehlt.
Java, 100%ig OO? LOL.
Allein, wie Bedingungen geprüft werden ist doch rein Prozedural.if (foo < bar) ...
Was daran ist OO?
Rein OO gibt's in anderen Sprachen. Du hast 'ne Klasse Bool, davon abgeleitet True und False. In Bool gibts ne abstrakte Methode ifTrue, die Code als Argument erwartet. True implementiert ifTrue so, dass der Code ausgeführt wird, False so, dass garnichts passiert. Wenn Bedingungen liefern eine Referenz auf ein Bool, die entweder auf ein Objekt des Typs True oder eins des Typs False veweist. Dem wird dann ifTrue geschickt.
foo < bar ifTrue: [...]
Sowas könnte man sicherlich auch in Java simulieren, in C++ habe ich's spaßeshalber mal gemacht. Aber C++ ist definitiv nicht dafür geeignet "rein" oo zu programmieren.
Java ist was Objektorientierung angeht in etwa auf dem selben Level, wie C++. Andere Sprachen sind dieß bezüglich viel weiter. Soviel dazu.
-
Helium, du hast mir unglaublich zu meiner Frage weitergeholfen...
-
Hallo,
helfen kann ich dir leider auch nicht, aber ich stelle mir dir Frage, wofür das gut sein soll? Ein Programm zu "konvertieren" verlangt, wie Elise schon sagte, nach einem sehr großen Zeitaufwand, der wahrscheinlich so gut wie nie berechtigt ist.
Meiner Meinung nach wirst du es genau so machen müssen:
...muß ich wohl das ganze dann neu designen und nur noch code-Schnipsel aus dem Original einfügen...
Was aber im Grunde auch exakt die Antwort auf die eingangs gestellte Frage ist:
muß also nach irgendeinem Schema die Sourcen analysieren, um dann auf die passende Objekt-Struktur zu kommen.
-
Du wirst wohl kaum jemanden Finden in der Welt der ein großes Projekt nach C++
portiert, schau dir doch einmal die ganzen großen OSS Projekte an die es schon
alnge gibt, die sind großteils in C geschrieben oder verwenden ein extrem stark
beschränktes C++, damit es auf vielen Plattformen lauft und weil es damals einfach
noch nicht so viele Features gab geschweige denn genügend Compiler die dies
unterstützten.Du kannst aber in C++ auch problemlos C Librarys verwenden, ist doch gar kein
Problem und je nachdem gibts bereits einen C++ Wrapper dafür oder du schreibst
dir einen. Ist weitaus weniger aufwändig.
-
Helium, du hast mir unglaublich zu meiner Frage weitergeholfen...
Kein Problem, mach ich doch gerne.
Und jetzt noch zum Portieren.
generell:
extern "C"
könnte hilfreich sein.
Speziell:
[...], muß also nach irgendeinem Schema die Sourcen analysieren, um dann auf die passende Objekt-Struktur zu kommen.
Willst du den ganzen Code umstruktorieren? Das halte ich für eine ganz schlechte Lösung. Das ist zu viel Arbeit, kostet zu viel Zeit, es können unmengen neuer Fehler entstehen, etc.
Versuchs mit Wrappern, wie SirLant schon sagte. Ein C++ Compiler frist C-Code größtenteils. Nach einigen kleinen Anpassungen sollte es IMHO laufen. Wenn es dabei Probleme gibt, kannst du ja nochmal speziell nachfragen.
Solltest du Probleme beim finden eines vernünpftigen OO-Ansates in bestimten Situationen haben, kannst du natürlich auch deswegen nachfragen. Allerdings sagtest du ja, das du in dem Thema recht fit seist.
-
Na gut, danke an alle. Werde nun mir eine Art Wrapper-Konstrukt bauen...