amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > C und C++ Mix [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

17.08.2003, 10:59 Uhr

mausle
Posts: 92
Nutzer
Hi,

sicherlich gibt es irgendwo im Netz Hinweise ob und wie das
geht. Hat jemand einen Link.

Ich möchte ein C-Projekt schrittweise von C nach C++
umstellen, kann SAS oder gcc sein.

Bevor jemand fragt, ich kenne mich (noch) nicht
sehr gut mit C bzw. C++ am Amiga aus.

Ciao, Markus

[ - Antworten - Zitieren - Direktlink - ]

17.08.2003, 12:07 Uhr

Tessien
Posts: 55
Nutzer
Zitat:
Original von mausle:
Hi,

sicherlich gibt es irgendwo im Netz Hinweise ob und wie das
geht. Hat jemand einen Link.

Ich möchte ein C-Projekt schrittweise von C nach C++
umstellen, kann SAS oder gcc sein.

Bevor jemand fragt, ich kenne mich (noch) nicht
sehr gut mit C bzw. C++ am Amiga aus.

Nur am Amiga oder allgemein? Eigentlich müsste jedes C-Programm, daß halbwegs sauber geschrieben wurde, auch ohne Änderungen unter C++ kompilieren. Demzufolge verstehe ich auch das "schrittweise" Umschreiben auf C++ nicht. C++ und die ganze objektorientierte Sauerei, die C++ bietet, ist eine völlig andere Denkweise. Ein Programm auf C++ umzuschreiben hieße für mich, es neu zu schreiben.

Erklär mal bitte, was genau Du vorhast. Vielleicht verstehe ich Deine Frage dann besser.

Bye, Thomas


--
Thomas Schulze - programmer at Dreamworlds Development - http://www.dreamworlds.de

[ - Antworten - Zitieren - Direktlink - ]

17.08.2003, 12:52 Uhr

Mad_Dog
Posts: 1944
Nutzer
Du kannst C-Code ganz normal in C++ weiterverwenden, solange Du eventuell benötigte Includes und Linker-Libs einbindest.
Um z.B. die funktion printf() weiter verwenden zu können, mußt Du das C-Include stdio.h verwenden.
Wenn Du ein altes C-Programm durch nen C++ Compiler jagst, compiliert es meistens sofort. Was Du bei C++ beachten mußt ist z.B. daß Funktionsprototypen im Code immer vor dem ersten Aufruf bekannt sein müßen. Auch bei anderen Sachen ist ein C++ Compiler wesentlich "pingeliger" als ein C-Compiler. Du wirst also unter Umständen jede Menge Warnins (z.B. gefährliche Typecasts) bekommen.

--

http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

17.08.2003, 13:53 Uhr

mausle
Posts: 92
Nutzer
Nun, ich habe mich etwas ungenau ausgedrückt.

Ich möchte das was sinnvoll ist in eigene
Klassen packen. Dh. also schon zum Grossteil
neu schreiben, deswegen auch schrittweise.

Kann ich dann einfach in den Teilen die noch in
C sind auf C++ Objekte zugreifen. Umgekehrt ist
das logisch, da C++ mit gewissen Ausnahmen eine
Erweiterung von C ist. Wahrscheinlich brauche
ich irgendwelche Wrapper-Funktionen.

Danke schon mal für die bisherigen Infos.

Markus

[ - Antworten - Zitieren - Direktlink - ]

17.08.2003, 14:01 Uhr

Kronos
Posts: 1168
Nutzer
@mausle

Ich hatte vor Jahren dasselbe Problem und habe das so gelöst:

Aus "struct" wurde "class", nur eben das alle (alten) Variablen im
"public:" Teil standen (nicht sehr sauber aber was solls).

Danach kannst du weiterhing ganz normal mit "->" oder "." auf die
einzelnen Mitglieder der Klasse zugreifen.

Als zweites wurden die Funktionen den jeweiligen Datenstruktren/Klassen
zugeordnet, und als Member-Funktionen umgeschrieben. Wenn die Klassen
dabei um Variablen erweitert wurden so kamen diese natürlich in den
Protected-Bereich.

Nachdem ich das Programm soweit umgeschrieben hatte kamen auch die alten
Variablen in den Protected-Bereich.


Nach jedem dieser Schritte gab es selbstverständlich massig Fehler-
meldungen vom Compiler, aber nichts was sich nicht hätte schnell
korrigieren lassen.

MfG
Kronos
--

Only the good die young all the evil seem to live forever

[ - Antworten - Zitieren - Direktlink - ]

18.08.2003, 11:00 Uhr

Solar
Posts: 3680
Nutzer
Schritt 1: Den bestehenden Code ohne funktionale Änderungen durch einen C++-Compiler compilierbar machen. (C++ reserviert mehr Schlüsselworte, und einige "unfeine" C-Konstrukte sind unter C++ schlicht nicht erlaubt.)

Zitat:
Original von mausle:
Kann ich dann einfach in den Teilen die noch in
C sind auf C++ Objekte zugreifen.


Wenn Du Schritt 1 durchgeführt hast, ist Dein Programm bereits C++, und Du hast Zugriff auf alle Funktionen. Jetzt kannst Du mit der Umstrukturierung ("Refactoring") beginnen.

Kleiner Tip an Tessien: Die große Stärke von C++ sind nicht Objekte ("Objektorientierung"), sondern die Templates ("generische Programmierung")...

Und natürlich ist es jedem selbst überlassen, wieviele / welche C++-Features er nutzen will.

Zitat:
Umgekehrt ist das logisch, da C++ mit gewissen Ausnahmen eine
Erweiterung von C ist. Wahrscheinlich brauche ich irgendwelche Wrapper-Funktionen.


Nein. Ein "sauberes" C-Programm läßt sich auch mit einem C++-Compiler übersetzen - und ab dem Moment gibt es keinen "C-Teil" mehr, da C++ eben ein Superset von C ist - also auch keine Wrapper.

[ - Antworten - Zitieren - Direktlink - ]

18.08.2003, 19:46 Uhr

mrbbc
Posts: 101
Nutzer
Die einfachste Lösung ist wohl: alle .C-Dateien in .CPP-Dateien umbenennen.

Wenn der Compiler zwischen C und C++ anhand der Endungen unterscheidet, ist damit das Programm auf C++ umgestellt und C++ Features sind überall verfügbar.

Einige C++ Compiler mögen etwas pingelig sein, aber i.d.R. ist alles was in C syntaktisch korrekt ist C++ nur recht.

Es gibt aber ärgerliche Unterschiede - wenn man was mit einem C++ Compiler in C schreiben will, kann ein reiner C-Compiler streiken.

Z.B. bei structs.

In C++ darf man schreiben struct MYSTRUCT { ... und dann MYSTRUCT mystruct;. In C müsste man aber struct MYSTRUCT mystruct; schreiben.

(Wer's lieber ohne 'struct' schreibt kann in C auch typedef struct { ... } MYSTRUCT; schreiben)

Ausserdem gibt es ältere C-Standards; Apples C++-Compiler erlaubt unter "strict C" keine '//' Kommentare, obwohl sie im C99 Standard C zugerechnet werden.

--
it obvisiously seems to have been hard to write

[ - Antworten - Zitieren - Direktlink - ]

18.08.2003, 22:42 Uhr

mausle
Posts: 92
Nutzer
Hi Leuts,

eigentlich ist es ja ganz einfach
ich hab nur die gedankliche Kurve
nicht so richtig gekriegt.

Muss mal Urlaub nehmen und das
Wetter schlechter werden, dann
kann ich das mal angehen. Jedenfalls
mal vielen Dank für die ganzen Infos
zur Aufklärung.

So long,
Markus

[ - Antworten - Zitieren - Direktlink - ]

19.08.2003, 07:57 Uhr

Solar
Posts: 3680
Nutzer
Zitat:
Original von mrbbc:
Einige C++ Compiler mögen etwas pingelig sein, aber i.d.R. ist alles was in C syntaktisch korrekt ist C++ nur recht.


Kann man so nicht stehen lassen. C++ ist in einigen Aspekten sehr viel strikter; dazu kommen die zusätzlichen Schlüsselworte. NULL ist kein (void*) 0, und andere "nette" Unterschiede. Der Umstellungsaufwand hält sich allerdings in Grenzen.

Einer der ersten Umstellungen, die ich vornehmen würde, wären die Namespaces. Unter C++ gibt's zwei Möglichkeiten, einen C-Include zu machen:

#include <stdlib.h>

#include <cstdlib>

Ersteres ist der "gewohnte" Header, zweiteres steckt alle Funktionen in den Namespace "std" - was den globalen Namensraum frei läßt.

Und bitte, kein "using namespace std;" - dann kann man sich die Namespaces auch gleich sparen. ;-) std::qsort(...) macht nun einmal sehr deutlich, daß man den Standard-QSort verwendet (hinter dem in der Regel gar kein Quicksort steckt... ;-) ), und nicht einen selbstprogrammierten... Jenseits der 10.000 Codezeilen werden solche Hilfen echt praktisch, und die 10.000 hat man schneller erreicht als man denkt.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > C und C++ Mix [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.