Linkliste
-
Linkliste für C++-Neulinge
Mit gekennzeichnete Themen setzen solide Grundkenntnisse voraus.
Bücher
Für Anfänger ist das wichtigste ein gutes Buch, welches Sprachgrundlagen und Standardbibliothek verständlich und korrekt erklärt. Leider ist der deutschsprachige Markt für gute Computerfachliteratur sehr dünn besetzt. Wer kein Problem mit Englisch hat, sollte sich unbedingt folgende, umfangreiche Liste ansehen, die stets aktuell gehalten wird:
https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282#388282
Einige der dort genannten Bücher sind auch auf Deutsch erschienen. Man sollte jedoch darauf achten, dass es sich auch wirklich um das gleiche Buch vom gleichen Autor handelt und nicht um einen Trittbrettfahrer mit ähnlichem Titel; und man sollte ein paar Rezensionen lesen, ob die Übersetzung etwas taugt.Eine leider etwas veraltete Liste für deutschsprachige Titel findet man hier:
C/C++ Forum :: C++ Lernen - passende Lektüre und richtiger Anfang
Aktualisierungen dieser Liste gibt es hier:
https://www.c-plusplus.net/forum/333039#2456058Wer nach einem kostenlosen Buchersatz sucht, ist mit dem Openbook "Thinking in C++" gut bedient:
http://mindview.net/Books/DownloadSitesReferenzen
Mit Referenz ist eine Dokumentation der C++-Standardbibliothek gemeint.
Die beiden bekanntesten und wahrscheinlich auch umfangreichsten Websites sind:Eine Referenz lässt sich nur effizient nutzen, wenn man bereits eine Vorstellung hat, wonach man sucht. Sie ersetzt kein Lehrbuch.
Magazin
Seit 2005 bringt c-plusplus.net das C++-Magazin heraus. Viele Stammgäste des Forums haben sich als gute Autoren darin verewigt:
Oft empfohlene Artikel sind unter anderem:
- Zufälle gibt's?! - Funktionen rund um rand, Random und den Zufall
- Stringverarbeitung in C++
- Speicherverwaltung in C++ (und C)
- Überladung von Operatoren in C++, Teil 2
- Aufbau der Standardlibrary - Teil 1: Container
- Aufbau der Standardlibrary - Teil 2: Iteratoren und Algorithmen
- Aufbau der Standardlibrary - Teil 3: Hilfsklassen und Erweiterungen
- Einführung in Design Patterns
- Einführung in die Programmierung mit Templates
FAQs
Viele Fragen wurden schon oft gestellt und noch öfter beantwortet:
- C/C++ Forum :: Die meist gestellten Fragen
- parashift.com/c++-faq - Not just How - also When and Why!
Tutorials
Tutorials ersetzen kein Buch, seien aber trotzdem erwähnt:
- cplusplus.com/doc/tutorial (download)
- c++.de - Tutorials und Ebooks - C++ (deutsch)
- c++.de - Tutorials und Ebooks - C++
- c++.de - Tutorials und Ebooks - Object Oriented Programming
- c++.de - Tutorials und Ebooks - STL
"Tutorials" auf YouTube sollten von Anfängern gänzlich gemieden werden!
C++11
C++11
istwar die neueste Fassung des C++-Standards, welche im August 2011 von der ISO verabschiedet wurde und C++03 ersetzt.Während das Verständnis einiger neuen Features wie z. B. Lambda-Ausdrücke, variadic templates und Multithreading samt tls solide Grundkenntnisse voraussetzt, sind andere bereits für Sprachneulinge interessant:
- C++11 - Artikel in der englischen Wikipedia samt Auflistung wichtiger Neuerungen
- ISO/IEC Document n3337 - im Grunde der Text des offiziellen Standards ISO/IEC 14882:2011 mit lediglich redaktionellen Änderungen
Um C++11 Code kompilieren zu können, braucht man einen C++11-kompatiblen Compiler. Die aktuellsten Versionen der gängigen Compiler unterstützen fast alle der mit C++11 eingeführten Features:
- GCC ab Version 4.3 (spärlich) bis Version 4.8.1 (vollständig)
- Clang ab Version 2.9; Vollständige Kompabilität ab Version 3.3 und höher. Eine Auflistung aller C++11-Features samt der Version ab welcher Clang diese unterstützt befindet sich hier.
- Visual C++ 12.0 (Teil von Visual Studio 2013 (Express)). Bessere C++11 Unterstützung bieten jedoch das Visual C++ Compiler November 2013 Community Technology Preview (CTP) bzw. die Visual Studio 14 CTPs.
C++14
C++14 ist die neueste Fassung des C++-Standards, welche im Dezember 2014 von der ISO verabschiedet wurde und C++11 ersetzt. Die Neuerungen sind jedoch bei weitem nicht so radikal wie beim Sprung von C++03 auf C++11:
- C++14 - Artikel in der englischen Wikipedia samt Auflistung wichtiger Neuerungen
- ISO/IEC Document n4296 - im Grunde der Text des offiziellen Standards ISO/IEC 14882:2014(E) mit lediglich redaktionellen Änderungen
Wie bei C++11 auch, braucht man einen kompatiblen Compiler, um C++14-Code übersetzen zu können. Die meisten Compiler beherrschen bereits eine mehr oder wenige große Untermenge der neuen Features, man muss sie aber in der Regel durch einen Compilerschalter aktivieren. Man kann normalerweise zu allen gängigen Compilern leicht Listen der unterstützten Features und der nötigen Compilerschalter finden, indem man einfach nach "C++14" und dem Namen des Compilers googelt.
Compiler und IDEs
- C/C++ Forum :: Liste kostenloser Compiler und IDEs
- C/C++ Forum :: FAQ - Compiler & IDEs
- C/C++ Forum :: Compiler- und IDE-Forum
Boost
Boost ist eine Sammlung vieler Bibliotheken, die unter C++-Programmierern breite Verwendung finden. Viele der sog. Boost-Libs wurden bereits in den C++-Standard integriert.
Wer Boost nicht selbst kompilieren möchte, kann auf nuwen.net eine MinGW Distribution (gcc) inklusive vorkompiliertem Boost beziehen.
Für Benutzer von Visual Studio 2010 und 2012 gibt es von unserem Forenmember Vertexwahn ein Tool Namens BlueGo, das Boost, Qt and OpenSceneGraph selbst herunterlädt und übersetzt.- boost.org - offizielle Website
- Getting Started on Unix Variants
- Getting Started on Windows
- Highscore-Tutorials (deutsch, teils veraltet)
GUI-Programmierung
Eine grafische Oberfläche ist ein wesentlicher Bestandteil vieler Desktopapplikationen.
- C/C++ Forum :: Wie kann ich eine Oberfläche programmieren (siehe Punkt 1)
- C/C++ Forum :: Alles zur GUI Programmierung in C und C++
Tutorial zu wxWidgets im C++-Magazin:
Artikel zu den MFC im C++-Magazin:
- Eine MFC-Anwendung unicodefähig machen
- Eine MFC-Anwendung mehrsprachfähig erstellen
- Zusammenhänge der Klassen einer SDI in der MFC
- Datenbankzugriff mit CRecordset (und CDatabase)
Verschiedene empfehlenswerte Seiten
- isocpp.org - News, Status & Discussion about Standard C++
- stroustrup.com - offizielle Seite von Bjarne Stroustrup, Erfinder von C++
- cdecl.org - Übersetzt selbst unverständlichste C (und C++) Variablendeklarationen in klares Englisch und zurück
Hilfe beim Posten
Bevor man eine Frage stellt:
- Da fast jedes Problem mit einer dermaßen verbreiteten Sprache wie C++ schon einmal dagewesen ist, findet man mit einer Fehlermeldung und eventuell ein paar Stichworten + "C++" auf Google fast zu jedem Thema Input.
- Sollten einem die richtigen Stichworte für Google nicht in den Sinn kommen, kann man immer noch die Suchfunktion des Forums versuchen.
- Oftmals ist auch ein Blick in die C++-FAQs hilfreich, denn viele Fragen wurden schon oft gestellt und noch öfter beantwortet.
Sollte die eigene Recherche nicht auf den grünen Zweig führen:
- C/C++ Forum :: Die meist gestellten Fragen
- C/C++ Forum :: Du brauchst Hilfe?
- C/C++ Forum :: Wie poste ich richtig Code?
- Wie man Fragen richtig stellt
~edit durch SeppJ, 18. April 2014: Kaputten Link repariert und nicht mehr aktuelle Bemerkung zu C++11 auf www.cplusplus.com entfernt.~
~edit durch Arcoth, 2. Juli 2014: Liste der Compiler im C++11-Abschnitt verfeinert. Bücher-Rubrik oben platziert.~
~edit durch Swordfish, 1. August 2014: Informationen zu Visual C++ aktualisiert.~
~edit durch SeppJ, 25. November 2015: Informationen zu C++14 hinzugefügt~
~edit durch SeppJ, 23. Mai 2017: Bücherliste so gut wie möglich aktualisiert.~
Linkliste zu lesenswerten Beiträgen
Im Rahmen der Diskussion um die Neugestaltung der FAQ, hier mal ein Vorschlag, wie so etwas aussehen könnte. Die Idee ist, dass im ersten Beitrag dieses Threads eine Liste von Links zu häufig gegebenen Antworten zu finden ist. Das können Beiträge aus alten Threads sein oder neue Beiträge, die dann auch in diesem Thread selber gepostet werden können.
Die Leute, auf die typische FAQ abzielen, lesen ohnehin keine FAQ. Der Sinn dieses Threads ist daher, dass man hier als regelmäßiger Forennutzer schnell und einfach Links zu guten Antworten finden kann, die man dann selber als Antwort nutzen kann, anstatt zum Tausendsten Male die gleiche Antwort auf eine häufig gestellte Frage oder ein häufig auftretenden Problem neu zu formulieren.
Hier mal ein Anfang, wie so etwas aussehen könnte. Um mehr Links wird gebeten, ich werde sie dann hinzufügen. Bitte nur Links zu wirklich häufig gestellten Fragen oder häufig auftauchenden Problemen:
Form von Beiträgen im Forum:
- Du brauchst Hilfe?. Kopierbarer Markup Code: [Du brauchst Hilfe?](https://www.c-plusplus.net/forum/topic/200753)
- Wie man Probleme nachstellbar und nachvollziehbar macht. Kopierbarer Markup Code: [Wie man Probleme nachstellbar und nachvollziehbar macht](https://www.c-plusplus.net/forum/topic/304133)
- Wie man seinen Beitrag lesbar formatiert. Kopierbarer Markup Code: [Wie man seinen Beitrag lesbar formatiert](https://www.c-plusplus.net/forum/p2454960#2454960)
- Wie man Fragen richtig stellt. Bitte nur in ganz schlimmen, unbelehrbaren Fällen benutzen! Kopierbarer Markup Code: [Wie man Fragen richtig stellt](http://www.tty1.net/smart-questions_de.html)
C++ lernen:
- Bücher von Jürgen Wolf sind zum Lernen ungeeignet. Kopierbarer Markup Code: [Bücher von Jürgen Wolf sind zum Lernen ungeeignet](https://www.c-plusplus.net/forum/272350)
- Bücher und Tutorials zu C++. Kopierbarer Markup Code: [Bücher und Tutorials zu C++](https://www.c-plusplus.net/forum/p2454954#2454954)
Korrekte Benutzung von C++:
- volkard erklärt Vererbung: public-Vererbung bedeutet eine "ist ein"-Beziehung. Kopierbarer Markup Code: [public-Vererbung bedeutet eine "ist ein"-Beziehung](https://www.c-plusplus.net/forum/75672)
- Wikipedia über RAII: Resource Acquisition Is Initialization (RAII). Kopierbarer Markup Code: [Resource Acquisition Is Initialization (RAII)](https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization)
Hier vermisse ich einen guten Artikel im Forum. Würde ich gerne übernehmen, wenn jemand Zeit dafür findet.
Fragen zum Stil:
- Argumente gegen ungarische Notation in C++. Kopierbarer Markup Code: [Argumente gegen ungarische Notation in C++](https://www.c-plusplus.net/forum/p1773551#1773551)
Weitere Links zu diversen Themen
Recherchiert von Nutzer @dozgon. Siehe hier.
Literatur
- Hacking C++
- Visuelle C++-Spicker von André Müller.
- Microsoft's C++ Language Reference
- Referenz, die auch deutschsprachig zu lesen ist.
- Google's C++ Style Guide
- C++-Stilkunde und Konventionen von Google.
- C++ Core Guidelines
- ISO C++-Stilkunde.
- C++ Reference
- Ein C++-Nachschlagwerk.
- Für Anfänger evtl. schwer zugänglich.
- C++ patterns using plain C
- Ein Artikel, der C++-Konstrukte (wie virtuelle Funktionen) aus Sicht eines C-Programmierers schildert.
- C++ Patterns
- Spicker für gängige C++-Programmiertechniken.
- https://wg21.link/
- Moderne C++-Standards
- Beispielsweise wg21.link/std17 (C++17)
- https://www.eel.is/c++draft/
- Brandaktuelle Fassung des letzten C++-Standards
- Linksammlung zu den C++-Standards (Stack Overflow)
- Learn C++
- Eine Einführung in C++.
Veraltete Literatur
- cplusplus.com Referenz
- Gute, verständliche Beispiele, aber eher für C++98 und C++11.
- cplusplus.com Tutorial
- Eine Einführung in C++98/03?
Videos
- Cᐩᐩ Weekly With Jason Turner
- Jason Turner ist bekannt in der C++-Gemeinschaft.
- Er erklärt, wie man mit C++ umzugehen hat (wie auch zu seiner Zeit Scott Meyers).
Bewährte C++-Praktiken eben. - Die Zielgruppe sind eher fortgeschrittene Anfänger oder Profis.
- Er macht auch ab und an Videos für Anfänger
- The Cherno's C++-Erklärvideos
- Für Anfänger gut geeignet.
- Er war Spieleprogrammierer bei EA in Australien
Webwerkzeuge
- C++ Insights
- Man sieht den Code, wie es auch der C++-Kompilierer sieht.
- Compiler Explorer
- Online C++-Kompilierer
Bibliotheken und Werkzeuge
- JSON-Bibliothek von Niels Lohmann
- Catch2 (unit tests)
- cpp-httplib - A C++ header-only HTTP/HTTPS server and client library
- GuiLite - The smallest header-only GUI library(4 KLOC) for all platforms
- tinyobjloader - Tiny but powerful single file wavefront obj loader
- SFML - Simple and Fast Multimedia Library
-
Zum Thema Bücher, die zum C++-Lernen geeignet sind, empfiehlt sich das Lesen dieses Threads:
https://www.c-plusplus.net/forum/251551
und der Aktualisierungen aus diesem Beitrag:
https://www.c-plusplus.net/forum/333039#2456058
Weiterhin gibt es folgende, umfangreiche, englischsprachige Liste, die regelmäßig aktualisiert wird:
http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282#388282
Man bedenke, dass viel fortgeschrittene Literatur nur auf Englisch existiert! Englisch ist nun einmal die de-facto Weltsprache. Über kurz oder lang wird man um englische Literatur nicht umhin kommen, wenn man es ernst meint mit der Programmierung.Wer Kosten für Bücher scheut, mag sich vielleicht folgendes Buch ansehen, das kostenlos als Ebook erhältlich ist und auf beiden der oben genannten Listen empfohlen wird:
Thinking in C++Es gibt leider auch absolute Negativbeispiele für Bücher, von denen man sich möglichst fern halten sollte. Skeptisch sein sollte man bei allem, was schnellen (in 21 Tagen!), einfachen (für Dummies!) und/oder vollständigen (von A bis Z!) Erfolg verspricht. Hier ist besonders der Autor Jürgen Wolf schon sehr oft negativ aufgefallen. Viele der "dümmeren" Fragen hier im Forum sind darauf zurück zu führen, dass jemand dessen Bücher gelesen hat und daraus völlig falsche Sachverhalte gelernt hat.
Was Internettutorials angeht, muss man leider sagen, dass kein aktuelles, gutes Tutorial für C++-Anfänger existiert. Ganz besonders nicht, wenn es auch noch auf Deutsch sein soll. Für fortgeschrittene Themen findet man aber durchaus empfehlenswerte Seiten, zum Beispiel:
Guru of the WeekDie generelle Erfahrung im Forum ist, dass schlechtes Lehrmaterial mehr Schaden anrichtet, als es nützt. Wer auf eigene Faust nach irgendwelchen dubiosen Videotutorials lernt, wird vermutlich bald frustriert aufgeben, da das dort Gelernte nicht funktioniert, wenn man es selber anwendet (weil es einfach falsch ist und/oder falsch erklärt wurde). Selbst wenn man dann die Kurve bekommt und ein gutes Buch besorgt, muss man sich erst wieder mühsam abgewöhnen, was man falsch gelernt hat.
Ähnliches muss man auch über das Lernen von C sagen, wenn man C++ lernen möchte. Es ist nichts Verwerfliches da dran, C zu lernen, aber es taugt nichts als Vorbereitung auf C++. Wer C++ lernen möchte, sollte gleich mit C++ anfangen. Und man sollte tunlichst nicht versuchen, in C++ so zu programmieren, als wäre es C oder Java. Es gibt zwar große Ähnlichkeiten in der Grammatik der Sprachen (Tatsächlich haben sie alle die gleiche Grammatik), aber die jeweiligen Philosophien sind völlig unterschiedlich.
-
Wenn man Code im Forum postet (und in den meisten Fällen gehört zu einer Problembeschreibung auch eine Codebeispiel dazu) ist es wichtig, dass dieser lesbar formatiert ist. Unformatierter Code führt dazu, dass viele Leser den Beitrag gar nicht erst lesen, da sie schon beim ersten Blick abgeschreckt werden. Das Posten von formatierten Code ist ganz einfach:
- Zunächst einmal muss man natürlich über sauber eingerückten Code verfügen. Im Idealfall erledigt das bereits automatisch der Editor, den man für seinen Code benutzt (ansonsten sollte man überlegen, einen anderen Editor zu benutzen, der besser für Programmierung geeignet ist). Wenn man so etwas nicht hat, hilft zur Not auch diese Webseite: http://prettyprinter.de/index.php
Man beachte an dieser Stelle auch, welcher Code überhaupt relevant ist!
Manchmal lösen sich Probleme ganz von alleine, wenn man den Code sauber einrückt und dadurch beispielsweise eine fehlende oder falsch gesetzte Klammer entdeckt!
- Dann kopiert man den Code in den Foreneditor.
- Unter dem Editorfenster findet man eine Reihe von Smileys. Und darunter eine Reihe von Knöpfen, mit denen man verschiedene Codetags setzen kann. Drückt man den Button einmal, wird an der Cursorposition ein einleitendes Codetag (etwas in der Art von
[code="cpp"]
) gesetzt, welches am Anfang des Codes stehen sollte. Beim zweiten Drücken erhält man ein abschließendes Tag (etwas in der Form[/code]
), welches man an das Ende des Codes setzt. Alternativ kann man auch den Code markieren und dann einmalig den Button anklicken, damit automatisch die Tags an Anfang und Ende gesetzt werden. - Man benutze bitte die passende Sprache! Für alle hier im Forum gängigen Sprachen gibt es extra Tags. Der Button ganz links ("Code") ist wirklich nur dazu da, wenn gar nichts anderes passt.
- Ganz wichtig: Man benutze die Vorschau, ob die Formatierung auch wirklich funktioniert!
Mögliche Probleme und Lösungen:
- Es funktioniert nicht: Wahrscheinlich hat man öffnende und schließende Tags nicht richtig gesetzt. Öffnende Tags sehen so aus:
[tag]
, wobei "tag" der Typ des gesetzten Tags ist. Schließende Tags sehen so aus:[/tag]
. Zu jedem öffnenden Tag gehört ein schließendes Tag. Ineinander vernestelte Tags (also Tags in anderen Tags) funktionieren nur in Ausnahmefällen und sollten vermieden werden!
So sieht es richtig aus:
[c
ode="cpp"]
#include <iostream>int main()
{
std::cout << "Hello World\n";
}
[/code]-
Es funktioniert nicht und ich bin ganz sicher, dass ich alles richtig gemacht habe: Möglicherweise hat man aus irgendeinem Grund BBCode deaktiviert. Ganz tief unten unter dem Editorfenster gibt es eine Checkbox, um BBCode für einen Beitrag zu deaktivieren. Eventuell muss man erst noch den Text "Zeige Optionen" anklicken, damit sie erscheint. Diese Checkbox sollte nicht aktiviert sein. Möglicherweise hat man BBCode auch global im eigenen Profil deaktiviert. Sein Profil kann man als registrierter Nutzer über den Link rechts oben auf der Forenseite ansehen. Dort gibt es die Option, BBCode überall zu aktivieren, die standardmäßig eingeschaltet sein sollte.
-
Ich habe den Code in meinem Beitrag nicht formatiert und jemand hat mich auf diesen Beitrag verwiesen.
-
Ich bin ein registrierter Nutzer: Man kann als registrierter Nutzer seine Beiträge im Nachhinein editieren. Dazu gibt es rechts oben am Beitrag selber einen entsprechenden Link. Darüber kann man die passenden Codetags einfügen.
-
In bin kein registrierter Nutzer: Dann bleibt nur zu hoffen, dass ein netter Moderator den Beitrag sieht und für einen die Formatierung vornimmt. Bei nächsten Mal bitte selber drauf achten!
Es gibt unter dem Editorfenster auch noch zahlreiche andere Formatierungshilfen, zum Beispiel die in diesem Beitrag benutzten Listen, den Fett- und Kursivdruck und viele Sonderzeichen. Die meisten sollten selbsterklärend sein; mit Hilfe der Vorschau kann man experimentieren, wie diese genau zu benutzen sind. Wenn man wissen will, wie ein bestimmter Benutzer eine bestimmte Formatierung hin bekommen hat, kann man dessen Beitrag zitieren und so genau sehen, wie die Formatierung zustande gekommen ist. So kann man beispielsweise herausfinden, wie ich es geschafft habe, [c
ode="cpp"]Beispielcode[/code] zu posten, ohne dass der Code von der Forensoftware formatiert wurde.
-
Erst einmal gesperrt, um gegen Vandalismus zu schützen. Wer Vorschläge zu Erweiterungen hat, poste diese bitte in diesem Thread:
https://www.c-plusplus.net/forum/332879
Ich und die anderen Moderatoren werden die Vorschläge prüfen und ggf. übernehmen.
-
Ich habe beide Linklisten vereint und auf Markup angepasst. /cc @SeppJ