[C/C++] Richtig lernen

rn_

Professional Software Developer
7 Jan 2011
7,803
16,631
Hallo,
da in den letzten Wochen/Monaten öfters mal gefragt wurde, wie diverse Coder (u.A. Ich) C/++ gelernt haben. Als erstes gehe ich auf Bücher/Links und Referenzen ein, welche für Anfänger, aber auch für fortgeschrittene gut als Nachschlagewerk dienen. Falls Ihr das gerade hier am lesen seid, weil ihr euch schnell einen Hack (für CS:GO) pasten wollt bzw. "selbst schreiben" wollt: schlagt euch den Gedanken gleich wieder aus dem Kopf. Ihr werdet mehr Zeit darin investieren, Menschen mit euren abgefuckten Fragen zu nerven, als zum Ziel zu kommen. Ebenso sind YouTube Videos/Crashkurse zu 99,9% suboptimal und absolut nicht empfehlenswert!
Auf https://isocpp.org/ lohnt es sich hin und wieder nach Updates des Standards zu schauen. http://en.cppreference.com dient als Dokumentation der Standard Bibliothek. Ist einfacher online nachzuschauen, als im durch alle Files im Code.

Bücher:
  • C++ Primer 5.th Edition
    • Nicht nur ich, ebenso sogut wie jeder der das Buch gelesen hat wird das Buch empfehlen. Ja es ist auf Englisch, was allerdings bei einer Hochsprache üblich ist. Sämtliche Referenzen sind idR. auf Englisch.
  • C++ für Spieleprogrammierer
    • Ein Kollege von mir hat dadurch C++ gelernt. Ich hab bei ihm mir das Buch angeschaut, der Autor verfasst die Themen kurz aber mit genug Informationen.
  • 3D-Spielprogrammierung mit DirectX 9 und C++
    • Ist sozusagen der 2. Teil vom 2. Link. Für Leute die in die Richtung wollen, sicherlich nicht verkehrt.
  • Windows Internals 6.th Edition (Teil 1 | Teil 2)
    • Solltet Ihr euch definitiv durchlesen, wenn Ihr etwas auf der Treiberebene vor habt. Bessere Referenzen zu Memory Management & Driver I/O gibt es imo nicht.
Online lernen:
Referenzen:
Nützliche Seiten:

Ich lege euch eins ans Herz: wenn ihr die Sprache lernt, haltet euch an den aktuellen Standard. Ihr werdet es a) nicht bereuen und b) erleichtert es einem idR. die Arbeit ungemein, gerade wenn es um Arbeit mit Containern und/oder strings geht. Daher schaut euch die Guidelines an ;--)

Eigentlich benötigt man nur einen stinknormalen Editor und einen Compiler um sein Programm kompilieren und ausführen zu können, allerdings nimmt meist eine gute IDE einem viel Arbeit. Da der Otto-Normaluser idR. Windows verwendet, empfehle ich für Windows Visual Studio 2017 Community, die Community Version ist kostenlos, allerdings müsst ihr euch nach spätestens 30 Tagen mit eurem Microsoft Konto anmelden. Wer keins hat, sollte sich also eins erstellen. Für die, die unter OSX oder Linux sind: installiert euch gcc/g++ und/oder den C/C++ compiler von LLVM (clang/clang++) (bevorzuge Clang, deren Fehlerausgabe ist weitaus überlegen gegenüber der von gcc), Sublime 3 Editor und go. Alternativ gäbe es auch von JetBrains die CLion IDE, frisst aber etwas Resourcen.

Tools:
  • ReSharper++
    • Meine absolute Empfehlung. Falls ihr eine Uni-Mail habt, könnt ihr euch das Education Pack abholen, und Zahlt nichts für Produkte von JetBrains. Bessere Syntax Highlighing, eigene "IntelliSense" Engine, welche weitaus besser ist als die von Microsoft, etc..
  • Visual Assist X
    • Alternative zu ReSharper++, verbessertes Syntax Highlighing, verbessert IntelliSense.
  • Text Sharp
    • Aktiviert Truetype Fontrendering in Visual Studio. Ohne ist gar nicht mehr denkbar in meinen Augen.
  • Code Alignment
    • Vereinfacht die Formatierung vom Code. Ebenso ohne ist gar nicht mehr denkbar.
  • Atomineer
    • Um den geschriebenen Code zu dokumentieren. Seit ich mit frk frk arbeite werden alle Header dokumentiert. Nett wenn man im Team arbeitet, oder seine Arbeit veröffentlichen möchte. 30 Tage Trail, danach muss man für Zahlen. Alternative wäre DoxyGen für den Sublime Text 3 Editor.
  • Line Endings Unifier
    • Mit Abstand eins meiner fav. Extensions. Die Lineendings von Windows (^M) sind einfach nur scheiße. Wenn man dann noch eben ein Shellscript oder der Gleichen schreibt, es mit ^M -LF speichert, kann man diese oft nicht ausführen und muss sie erst mit vim oder einem anderen Texteditor öffnen und mit UNIX-LF abspeichern.
  • Markdown Editor
    • Gerade wenn man mit git bzw. Repositories arbeitet, schreibt man hin und wieder mal README- oder andere Markdownfiles. Um dafür nicht extra einen guten Texteditor öffnen zu müssen bietet sich die Extension gut an.

Configs:
Ich spar mir den Virustotal Link mal, da man den Inhalt der Configs einfach mit einem Editor anschauen kann, und es nur plain Text ist.

________________________________________________________________________

Linux (Ubuntu 16.04):
Code:
bash <(wget -O- --no-check-certificate 'https://paste.ee/r/roq9F/0')

OSX:
Falls Ihr noch kein homebrew installiert habt: https://brew.sh/ Installation sollte klar sein.
Code:
brew install cmake
brew install llvm

Entweder Ihr schaut mittels clang++/cmake --help wie die beiden Programme funktionieren, oder Ihr verwendet das folgende Template. Ihr müsst lediglich den Pfad für die Compiler und den Namen des Projektes bearbeiten. Die Ordnerstruktur sollte so aussehen:
  • <Projekt>
    • CMakeLists.txt
      • Code:
        set( CMAKE_C_COMPILER "/path/to/c/compiler" )
        set( CMAKE_CXX_COMPILER "/path/to/c++/compiler" )
        
        cmake_minimum_required( VERSION 3.5 )
        project( "TestProject" )
        
        set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -std=c++1z" )
        file( GLOB SOURCES "src/*.cpp" )
        
        set( EXECUTABLE_OUTPUT_PATH ${dir} )
        set( PROJECT_LINK_LIBS pthread )
        
        add_executable( "TestProject" ${SOURCES} )
        target_link_libraries( "TestProject" ${PROJECT_LINK_LIBS} )
    • src/
      • Hier kommen eure .hpp / .cpp Files rein.
    • build/
      • Hier werden die CMAKE Files und die erstellte Anwendung gespeichert.
Regulär würden die beiden Pfade so aussehen:
  • Linux
    • Code:
      set( CMAKE_C_COMPILER "clang" )
      set( CMAKE_CXX_COMPILER "clang++" )
  • OSX
    • Code:
      set( CMAKE_C_COMPILER "/usr/local/opt/llvm/bin/clang" )
      set( CMAKE_CXX_COMPILER "/usr/local/opt/llvm/bin/clang++" )
Und um das ganze zu erstellen:
Code:
cd <Verzeichnis>
cd build && rm -rf * && cmake .. && make -j8

Die 8 steht für die Anzahl der Threads die Ihr verwenden wollt.

________________________________________________________________________

Unter OSX gibt es natürlich auch XCode. Allerdings verabscheue ich diese schwule scheiß IDE und arbeite lieber mit Sublime Text 3


Grüße,
ReactiioN
 
Last edited:

Siplex

banned
15 Mar 2015
909
2,221
Sehr gelungene Anleitung wie ich finde.
Finde aber man sollte noch betonen, dass Youtube Videos als Primär Lernmethode eher suboptimal sind.
 
  • Like
Reactions: rn_

kapo

Honorable
26 Mar 2015
2,707
4,256
Schöner Post. Ich würde persönlich auch empfehlen erst mit C anzufangen und dann auf C++

Aus meiner eigenen Ausbildung / Erfahrung kann ich das Buch C++ Primer wirklich empfehlen.

Ach ja und ich mache das ganze jetzt seit 5 Jahren, habe beruflich viel damit zu tun und habe dennoch nicht auch nur den Hauch einer Ahnung einen Hack auch nur zu pasten (habs aber auch nie wirklich versucht bzw mich mehr damit beschäftigt) Also wer es deswegen lernen will kann es sich wirklich wieder aus dem Kopf schlagen ^^

Und ich würde noch erwähnen dass für den Anfang auch gut mit CodeBlocks gearbeitet werden kann anstatt eine aufgeblasene IDE wie zb VisualStudio....Später kommt man halt nicht mehr drum herum
 

frk

The Senate
6 Nov 2010
2,418
2,710
Schöner Post. Ich würde persönlich auch empfehlen erst mit C anzufangen und dann auf C++

Halte ich für ziemlich dumm wenn man nicht vor hat später auch wirklich was mit C zu machen.

Modernes C++ hat nur sehr sehr wenig mit C gemeinsam (außer der Syntax an sich). Das was man bei C wirklich lernen muss (Memory Managment) braucht man bei C++ dank Smartpointern und RAII eigentlich überhaupt nicht mehr machen.
 

rn_

Professional Software Developer
7 Jan 2011
7,803
16,631
Schöner Post. Ich würde persönlich auch empfehlen erst mit C anzufangen und dann auf C++

Aus meiner eigenen Ausbildung / Erfahrung kann ich das Buch C++ Primer wirklich empfehlen.

Ach ja und ich mache das ganze jetzt seit 5 Jahren, habe beruflich viel damit zu tun und habe dennoch nicht auch nur den Hauch einer Ahnung einen Hack auch nur zu pasten (habs aber auch nie wirklich versucht bzw mich mehr damit beschäftigt) Also wer es deswegen lernen will kann es sich wirklich wieder aus dem Kopf schlagen ^^

Und ich würde noch erwähnen dass für den Anfang auch gut mit CodeBlocks gearbeitet werden kann anstatt eine aufgeblasene IDE wie zb VisualStudio....Später kommt man halt nicht mehr drum herum
Aber es gibt keine vergleichbare IDE unter Windows, darum hab ich CodeBlocks oder DevC++ auch nicht genannt. Und ich würde nicht mit C anfangen, warum auch? Der Sprung ist nicht groß und warum sollte man sich nicht gleich an Konstruktoren/Destruktoren bzw. OOP halten? Und du willst doch nicht immer alles manuell freen, etc. oder etwa doch? Ich bin mir ziemlich sicher, wer C++ kann, wird in plain C/Objective-C keine großen Probleme haben, sofern man sich ein bisschen mit der Memory auskennt.
Ich mache es (noch) nicht beruflich, aber nun das 6. Jahr als "Hobby". Und für Gamehacking ist ein bisschen mehr Wissen erforderlich. Ich habe mich auch lang genug vor gedrückt, aber ohne Reverse Engineering kommt man nicht zum ziel. Der Anfang ist etwas träge, aber wenn man erstmal drinnen ist, dann kann das ganze auch schon einmal echt viel Spaß bringen.

Ich schau auch mal durch mein Regal, was sich an Materialien darin befindet und werde den first Post updaten.
 
  • Like
Reactions: Sephirot and kapo

kapo

Honorable
26 Mar 2015
2,707
4,256
Ist sicher richtig was ihr beide sagt, kommt halt darauf an was man später vor hat damit. Wer nicht iwas mit Treibern oder Mikrocontrollern zu tun haben will ist mit C++ direkt zu Beginn besser bedient...Ist halt auch deutlich mehr Stoff für jmd der wirklich bei 0 anfangen muss

Ich fand persönlich den Umstieg von C, was man verhältnismäßig relativ schnell erlernen kann, auf C++ ziemlich angenehm da nicht alles Bahnhof ist
 

fnx

Hack User
30 Oct 2015
583
126
Sehr nett Danke dir ( euch ) das ihr euch die Mühe macht Anfänger zuhelfen.
 

what

Hack User
15 Oct 2013
320
54
Erstmal einen Dank für die Mühe!

Nun; was wird so generell vom deutschsprachigen Buch " Der C++ Programmierer" gehalten?
Viele empfehlen es, noch vor dem Primer. Das allerdings nicht wegen der Sprache, sondern wegen der Bandbreite an Erklärungen.
Meinungen? Der C++ Programmierer oder doch C++ Primer?
 

KAMPFSP0RTLER

Well-Known Member
9 Jul 2016
797
359
Spitzen Thread, endlich mal ein Referenzpost wo wir künftig drauf verweisen können.
Finde das C++ Primer super. Habe ich mir auch vor Monaten mal gegönnt und war bisher immer zufrieden! - Dank deiner Empfehlung! :wink:
 

Electricz

cleanlegen.de
23 Dec 2014
5,431
4,472
Nice dass du dir die arbeit gemacht hast und alles rausgesucht/aufgelistet
Mal schauen ob ich nun wieder ansporn finde weiterzumachen ahah

Nur eine Frage: Primer Pflicht? Weil du ja auch Links zum online lernen geposted hast und ich idr einfacher durch lesen im Inet lernen kann als in Büchern
 

FLiiX

Well-Known Member
21 Dec 2015
490
742
Nice dass du dir die arbeit gemacht hast und alles rausgesucht/aufgelistet
Mal schauen ob ich nun wieder ansporn finde weiterzumachen ahah

Nur eine Frage: Primer Pflicht? Weil du ja auch Links zum online lernen geposted hast und ich idr einfacher durch lesen im Inet lernen kann als in Büchern
kann dir nacher mal die cpp primer pdf schicken :wink:

ich schätze mal es ist nicht erlaubt, hier nen link zur pdf zu posten?
 
  • Like
Reactions: rn_ and Electricz

empor1823

New Member
20 Mar 2017
6
0
Erstmal einen Dank für die Mühe!

Nun; was wird so generell vom deutschsprachigen Buch " Der C++ Programmierer" gehalten?
Viele empfehlen es, noch vor dem Primer. Das allerdings nicht wegen der Sprache, sondern wegen der Bandbreite an Erklärungen.
Meinungen? Der C++ Programmierer oder doch C++ Primer?
ich schließ mich der Frage mal an...
 

dash199t

Advanced Member
6 May 2015
4,029
1,461
Für c ansi ist c-howto.de ganz nett.
Gute Erklärungen und übersichtlich.

Wer paar Aufgaben will kann mir gerne pns schreiben oder ich mach die Mal Pub.

Guter thread btw!
 

Fluchtling

Honorable
17 Nov 2012
633
1,004
Nice dass du dir die arbeit gemacht hast und alles rausgesucht/aufgelistet
Mal schauen ob ich nun wieder ansporn finde weiterzumachen ahah

Nur eine Frage: Primer Pflicht? Weil du ja auch Links zum online lernen geposted hast und ich idr einfacher durch lesen im Inet lernen kann als in Büchern

Ja ist Pflicht sonst bekommste keinen C++ Führerschein, Rn hat die seiner M.n. sinnvollen Alternativen nur dazu gepackt damit der Post voller aussieht.
 
  • Like
Reactions: CIA and frechdax

Siplex

banned
15 Mar 2015
909
2,221
Nur eine Frage: Primer Pflicht? Weil du ja auch Links zum online lernen geposted hast und ich idr einfacher durch lesen im Inet lernen kann als in Büchern
Glaube das rn_ rn_ den Primer als eine Art von Fundament betitelt.
 
  • Like
Reactions: rn_

rn_

Professional Software Developer
7 Jan 2011
7,803
16,631
Nice dass du dir die arbeit gemacht hast und alles rausgesucht/aufgelistet
Mal schauen ob ich nun wieder ansporn finde weiterzumachen ahah

Nur eine Frage: Primer Pflicht? Weil du ja auch Links zum online lernen geposted hast und ich idr einfacher durch lesen im Inet lernen kann als in Büchern
Nein ist keine Pflicht, aber er ist auch ein top Nachschlagewerk. learncpp behandelt soweit ich das gesehen hab alle Interessanten Themen, nur lese ich lieber aus einem Buch als von einem Bildschirm.

kann dir nacher mal die cpp primer pdf schicken :wink:

ich schätze mal es ist nicht erlaubt, hier nen link zur pdf zu posten?
Nein ist es nicht. Allerdings wer zu jüdisch ist soll einfach "C++ Primer 5.th edition pdf" googlen. Erste Seite wird man fündig -.-"

Erstmal einen Dank für die Mühe!

Nun; was wird so generell vom deutschsprachigen Buch " Der C++ Programmierer" gehalten?
Viele empfehlen es, noch vor dem Primer. Das allerdings nicht wegen der Sprache, sondern wegen der Bandbreite an Erklärungen.
Meinungen? Der C++ Programmierer oder doch C++ Primer?
ich schließ mich der Frage mal an...
Ja ist Pflicht sonst bekommste keinen C++ Führerschein, Rn hat die seiner M.n. sinnvollen Alternativen nur dazu gepackt damit der Post voller aussieht.
Naja, ich persönlich habe nur den C++ Primer (mehr oder weniger) gelesen. Das 2. Buch hat 'nen Kollege von mir und wie bereits gesagt: ich hab es mir grob angeschaut und durchgelesen - und das passte soweit. Daher habe ich es verlinkt - ebenso wie mit dr Fortsetzung.

Glaube das rn_ rn_ den Primer als eine Art von Fundament betitelt.
Nicht nur das, dient auch immer wieder als Nachschlagewerk. Daher kann ich den immer wieder nur allen ans Herz legen
 
  • Like
Reactions: Siplex