Forum: Compiler & IDEs C++ für Umsteiger


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

ich bin auf der Suche nach Lesetipps zum Umstieg von C auf C++. C++ kann 
ich (noch) nicht, aber durch andere Sprachen wie Python und Matlab bin 
ich mit objektorientierter Programmierung vertraut.

Die Plattform ist hauptsächlich STM32 (IDE momentan EmBitz mit ARM-GCC).

Direkt die komplette Codebasis in C++ neu schreiben ist unrealistisch. 
Also ist eher der behutsame Umstieg in einem Kleinprojekt geplant. Gibt 
es Lesetipps, wie man im Jahr 2020 von C auf C++ weiterlernt?

:
von Thomas R. (r3tr0)


Lesenswert?

Generell für den STM32 würde ich erst einmal dieses Tutorial empfehlen:
http://stefanfrings.de/stm32/

Was mir bei C++ sehr geholfen hat war:
Der C++ Programmierer von Ulrich Breymann.
https://www.amazon.de/Programmierer-professionell-anwenden-L%C3%B6sungen-nutzen/dp/3446448845/

Hier kommst du gut voran, wenn du schon Kenntnisse in C hast.

von Walter T. (nicolas)


Lesenswert?

Thomas R. schrieb:
> Was mir bei C++ sehr geholfen hat war:
> Der C++ Programmierer von Ulrich Breymann.

Danke für den Tipp! Anscheinend ist eine 994seitige Leseprobe der 
Ausgabe von 2015 ist im Netz zu finden. Da kann ich mir ja in Ruhe übers 
Wochenende eine Meinung bilden, ob sich der Kauf lohnt.

von Sven B. (scummos)


Lesenswert?

Mein Tipp: vergiss, dass die Sprachen verwandt sind, und nimm einfach 
an, es sei eine komplett andere Sprache. Modernes C++ hat vom Stil her 
nix mit C zu tun.

Und suche unbedingt Ressourcen, die mindestens nach C++11 entstanden 
sind.

von Rolf M. (rmagnus)


Lesenswert?

Sven B. schrieb:
> Mein Tipp: vergiss, dass die Sprachen verwandt sind, und nimm einfach
> an, es sei eine komplett andere Sprache. Modernes C++ hat vom Stil her
> nix mit C zu tun.

Auf einem STM32 ist man dann aber doch auch viel mit C-Code im Kontakt.

> Und suche unbedingt Ressourcen, die mindestens nach C++11 entstanden
> sind.

ja, auf jeden Fall.

Beitrag #6453408 wurde von einem Moderator gelöscht.
Beitrag #6453416 wurde von einem Moderator gelöscht.
Beitrag #6453418 wurde von einem Moderator gelöscht.
Beitrag #6453443 wurde von einem Moderator gelöscht.
Beitrag #6453444 wurde von einem Moderator gelöscht.
Beitrag #6453445 wurde von einem Moderator gelöscht.
Beitrag #6454284 wurde von einem Moderator gelöscht.
Beitrag #6454285 wurde von einem Moderator gelöscht.
Beitrag #6454286 wurde von einem Moderator gelöscht.
von Walter T. (nicolas)


Lesenswert?

Eventuell ist die Frage oben etwas undeutlich gestellt. Sie lautet: "Was 
kann jemand, der C kennt, sinnvollerweise lesen, um C++ zu lernen?".

Leider wird sie von Laien oft missverstanden und mit der Frage "Warum 
ist Assembler so viel besser als alle anderen Sprachen?"

Bitte in diesem Thread nur die erste Frage behandeln. Sie ist 
kompliziert genug. Für die zweite kann ein eigener Thread aufgemacht 
werden.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Walter T. schrieb:
> durch andere Sprachen wie Python und Matlab bin
> ich mit objektorientierter Programmierung vertraut.

In dem Fall würde ich die üblichen Verdächtigen empfehlen:

https://www.amazon.de/Scott-Meyers/e/B004BBEYYW%3Fref=dbs_a_mng_rwt_scns_share

http://www.gotw.ca/publications/

https://www.amazon.de/C-Programming-Language-Bjarne-Stroustrup/dp/0321563840

Oliver

Beitrag #6454470 wurde von einem Moderator gelöscht.
Beitrag #6454471 wurde von einem Moderator gelöscht.
Beitrag #6454472 wurde von einem Moderator gelöscht.
von S. R. (svenska)


Lesenswert?

Walter T. schrieb:
> Gibt es Lesetipps, wie man im Jahr 2020 von C auf C++ weiterlernt?

Dem Hinweis, dass C++ eine andere Sprache als C ist, kann ich mich nur 
anschließen. Das heißt aber nicht, dass du direkt idiomatisches C++20 
schreiben musst, du darfst dir bestimmte Dinge rauspicken.

Lesetipps habe ich keine, höchstens Vorträge von den C++-Konferenzen 
(gibt's auf Youtube). Da lernt man zwar nicht so viel, bekommt aber 
einen Überblick über das "was es alles gibt und warum". Sowas finde ich 
als Einstieg inzwischen wesentlich hilfreicher als Bücher.

Die aus meiner Sicht wichtigsten Dinge für den Ein-/Umstieg nach C++ 
sind Referenzen, Grundlagen der Objektorientierung und Vererbung und die 
Container/Datenstrukturen der Standardbibliothek.

Objektorientierung ist nicht überall sinnvoll, aber allein die fertigen 
Container (und ein paar Syntax-Nettigkeiten, z.B. range-based for-loops) 
sind für mich schon ein Grund für einen C++-Compiler, selbst wenn der 
Rest des Codes eigentlich nur C ist. Beschäftige dich damit unbedingt 
ausführlicher.

Was "modernes" C++ angeht, damit habe ich weniger zu tun. Das meiste ist 
C++11 mit ein paar modernen Klecksen, die nicht weiter auffallen. 
Interessant wären da vielleicht Lambdas und die eher neuen Erweiterungen 
für z.B. Multithreading. Das ist nützlich, das braucht man öfter.

"Einfach mal machen."

von A. S. (achs)


Lesenswert?

Walter T. schrieb:
> Leider wird sie von Laien oft missverstanden und mit der Frage "Warum
> ist Assembler so viel besser als alle anderen Sprachen?"

Ich denke, Du spielst auch darauf an:

Sven B. schrieb:
> vergiss, dass die Sprachen verwandt sind, und nimm einfach
> an, es sei eine komplett andere Sprache. Modernes C++ hat vom Stil her
> nix mit C zu tun.

Das stimmt leider. Ja, C++ war am Anfang mal ein Art Präprozessor für 
OOP, der C-Code erzeugt hat, und ja, man kann mit C++ auch reinen C-Code 
schreiben. Aber das führt in die Irre.

Es kam nicht nur OOP dazu: Templates sind einzigartig. Und zudem 
verschluckt C++ alles, was sich irgendwo bewährt hat.

Lerne es als neue Sprache, von Anfang an, und freue Dich, wenn Du schon 
weisst (oder glaubst, zu wissen), was ein ++ bewirkt oder ein &&.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

A. S. schrieb:
> Ich denke, Du spielst auch darauf an:

Nein, er spielte auf Moby an, der mal wieder überall seinen Senf dazu 
geben zu müssen meint.

von Sven B. (scummos)


Lesenswert?

Vererbung ist überbewertet, moderne Sprachen gehen (korrekterweise, wie 
ich finde) eher in Richtung Composition. Den einen signifikanten Vorteil 
gegenüber C finde ich da eher das RAII-Pattern, das durch die 
Konstruktoren/Destruktoren ermöglicht wird.

von Walter T. (nicolas)


Lesenswert?

Meine Bemerkung bezog sich, wie Jörg schon richtig bemerkt hat, auf 
einen inzwischen gelöschten Beitrag, bei dem das Thema, dass 
Hochsprachen für einen µC fehl am Platze seien, mal wieder in Romanlänge 
ausgewalzt wurde.

A. S. schrieb:
> Lerne es als neue Sprache, von Anfang an

Nach allem, was ich sehe, ist Lehrbuch-C++ von C ungefähr gleich weit 
weg wie Matlab. Es sind zwei verschiedene Sprachen, bei denen man sieht, 
dass der Entwickler der neueren die alte kannte, und die beide den 
netten Nebeneffekt haben, dass sie mit existierendem C-Code koexistieren 
können.

Und darauf bezog sich auch das "für Umsteiger" in meiner Frage ganz 
oben. Eine neue Programmiersprache ist das eine. Aber man hat ja auch 
noch jede Menge funktionierenden Legacy-Code, bei dem eine schrittweise 
Migration sinnvoll ist.

Oliver S. schrieb:
> In dem Fall würde ich die üblichen Verdächtigen empfehlen:

Scott Meyers "Effective C++" beschäftigt mich sein Wochen und wird es 
auch noch die nächsten Monate. Lohnt es sich, im Nachgang noch den 
Stroustrup zu lesen?

Sven B. schrieb:
> Vererbung ist überbewertet

Von Vererbung verspreche ich mir eine deutlich Vereinfachung meines 
Grafiksystems. Von RAII ehrlich gesagt wenig, weil bei meinen 
µC-Projekten die Deinitialisierung fast immer nur der Vollständigkeit 
halber implementiert ist, aber eh fast nie aufgerufen wird.

Viel verspreche ich mir von static assertions, konstanten Ausdrücken und 
von Lambda-Ausdrücken. (Letztere sind zwar nur syntaktischer Zucker, 
aber welcher, der viel Scrollarbeit sparen kann.)

: Bearbeitet durch User
von Dirk K. (merciless)


Lesenswert?

Walter T. schrieb:
> Scott Meyers "Effective C++" beschäftigt mich sein Wochen und wird es
> auch noch die nächsten Monate. Lohnt es sich, im Nachgang noch den
> Stroustrup zu lesen?
Lies lieber Josuttis' Bücher zu C++ und der STL,
Stroustrup ist sehr abstrakt und eher akademisch.

merciless

von A. S. (achs)


Lesenswert?

Walter T. schrieb:
>> Vererbung ist überbewertet
>
> Von Vererbung verspreche ich mir eine deutlich Vereinfachung meines
> Grafiksystems.

Auch da solltest Du zumindest die genannte Alternative und deren 
Unterschiede Dir anschauen
Sven B. schrieb:
> eher in Richtung Composition.

Walter T. schrieb:
> Von RAII ehrlich gesagt wenig, weil bei meinen
> µC-Projekten die Deinitialisierung fast immer nur der Vollständigkeit
> halber implementiert ist, aber eh fast nie aufgerufen wird.

ich hätte jetzt gedacht, dass RAII in Grafiksystemen (die Du kurz vorher 
erwähnst) ganz hilfreich ist.

von Oliver S. (oliverso)


Lesenswert?

Walter T. schrieb:
> Scott Meyers "Effective C++" beschäftigt mich sein Wochen und wird es
> auch noch die nächsten Monate. Lohnt es sich, im Nachgang noch den
> Stroustrup zu lesen?

Das musst du entscheiden, aber wenn du schon fragst, vermutlich nicht. 
Meyers und Sutter bringen halt keinen C++ Gesamtüberblick, sondern 
besprechen (wichtige) Einzelthemen. Fundierte C++ - Grundlagen sollte 
man da schon haben. Der Stroustrup liefert diese, aber ob den noch 
brauchst, musst du selber wissen.

Vielleicht ist da eher dann was zu Entwurfsmustern o.ä. sinnvoll. Der 
Übergang von C zu C++ ist ja weniger die andere Syntax, sondern vor 
allem das, was man damit anstellen kann.

Oliver

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Lesenswert?

Falls es für dich in Fragte kommt, C++ erstmal ohne Mikrocontrolelr nur 
auf dem PC zu lernen, könntest du mit einem QT Tutorial anfangen:
http://stefanfrings.de/qt_lernen/index.html

Am Ende des Artikel empfehle ich auch ein paar Bücher.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Na ja, der Walter liest ja schon, da bringt ihm ein „Hello world“ in Qt 
wohl keinen großen Erkenntnisgewinn.

Oliver

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Lesenswert?

Oliver S. schrieb:
> Na ja, der Walter liest ja schon, da bringt ihm ein „Hello world“ in Qt
> wohl keinen großen Erkenntnisgewinn.

Das sehe ich auch so. Anders herum wird ein Schuh draus: Mit so einem 
Tutorial* bekommt man ein erstes Gefühl für die Programmiersprache. 
Danach versteht man die komplexen Bücher besser.

Walter T. schrieb:
> Lohnt es sich, im Nachgang noch den
> Stroustrup zu lesen?

Ich finde seine Bücher sehr gut, aber sie sind echt schwere Kost. Man 
kann sich da schnell in Details verzetteln, die zwar durchaus wichtig 
und gut zu wissen sind, aber für den Anfang erstmal zu viel.

*) Da geht es ja auch mehr um C++ als um Qt. Qt ist da nur schmückendes 
Beiwerk, damit nicht alles im öden Terminalfenster abläuft.

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

schau dir das einmal an. http://cppbuch.de/
Ich habe davon die vorherige C++17 Version. Ich hatte mir noch ein 
anderes gekauft. Von Torsten T. Will "C++ Das umfassende Handbuch" von 
Rheinwerk. Das liest sich jedoch nicht leichter. Damit möchte ich sagen 
das das Buch von Ulrich Breymann aus meiner Sicht wohl das derzeit 
rundeste Gesamtpaket darstellt. Ist auf jeden Fall einen Blick wert.

von Walter T. (nicolas)


Lesenswert?

Ich bin seit einigen Tagen am Breymann. Zuerst an der PDF-"Leseprobe" 
der 2014er-Version, die im Netz zu finden ist, jetzt auch am gedruckten 
Buch. Mit 994 Seiten ist das aber ein ziemlicher Klopper, also wird das 
ein Weilchen dauern, bis der Break-Even-Point, wo es mehr Nutzen als 
Aufwand ist, erreicht ist. Ich rechne mal grob bis Mitte nächsten 
Jahres. Für mich ist die ganze Programmiererei je nur ein Hobby, für das 
nur wenige Stunden pro Woche Zeit ist.

Immerhin: Das "Hallo Welt"-Blinken auf einem Nucleo-64-Board ging 
problemlos und einfach, und das Zusammenspiel von C und C++ im gleichen 
Projekt (ich nutze momentan EmBitz) ist erstaunlich unspektakulär 
problemarm. Das lässt hoffen.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

alles braucht seine Zeit.  :-)

Dieser Beitrag kann nur von angemeldeten Benutzern beantwortet werden. Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.