Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
talit:cpp [2020-10-19 10:45] – [2.1 Grundlegender Synax] sca | talit:cpp [2020-10-21 06:04] (aktuell) – [3.1 Testprogramm] sps | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== - C++ Grundlagen ====== | ====== - C++ Grundlagen ====== | ||
+ | |||
+ | Diese Seite ist nicht als allumfassendes Tutorial gedacht. Es ist eher eine Sammlung von wichtigen Punkten und Links zu weiteren Quellen. Es wird davon ausgegangen, | ||
===== - Installation ===== | ===== - Installation ===== | ||
Zeile 7: | Zeile 9: | ||
==== - Unix (Mac & Linux) ==== | ==== - Unix (Mac & Linux) ==== | ||
- | Auf Unix-basierten Systemen (Mac und Linux) sollte der GNU Compiler bereits installiert sein. Mit `g++ -v` kannst du dies sicherstellen und sehen, welche Version installiert ist. | + | Auf Unix-basierten Systemen (Mac und Linux) sollte der GNU Compiler bereits installiert sein. Mit `g++ -v` kannst du dies sicherstellen und sehen, welche Version installiert ist. Weiter unten wird erklärt, wie man Programme kompilieren und ausführen kann. |
==== - Windows ==== | ==== - Windows ==== | ||
- | * MinGW: http:// | + | * MinGW: http:// |
* Video: https:// | * Video: https:// | ||
* (nicht explizit getestet) | * (nicht explizit getestet) | ||
+ | |||
+ | Weiter unten wird erklärt, wie man Programme kompilieren und ausführen kann. | ||
+ | |||
+ | ==== - Programmierumgebung ==== | ||
+ | |||
+ | Je nachdem, an was für einem Projekt man arbeitet und welche Vorlieben man hat, kann es auch Sinn machen, mit einer Programmierumgebung (IDE) zu arbeiten. Bevor man dies tut, sollte man aber verstanden haben, wie der Build-Prozess von C++ funktioniert und man sollte in der Lage sein, Programme in der Konsole zu kompilieren und auszuführen. | ||
+ | |||
+ | Hier ein paar Vorschläge für Programmierumgebungen (bei weitem nicht komplett) mit Tutorials zur Installation: | ||
+ | * Visual Studio Code (Win & Mac) | ||
+ | * Windows: https:// | ||
+ | * Mac: https:// | ||
+ | * Visual Studio (Win) | ||
+ | * The Cherno: https:// | ||
+ | * XCode (Mac) | ||
+ | * The Cherno: https:// | ||
+ | |||
+ | |||
===== - C++ Programmieren ===== | ===== - C++ Programmieren ===== | ||
- | ==== - Grundlegender Synax ==== | + | ==== - Grundlegende Syntax |
- | Es wird angenommen, dass du bereits über Vorwissen in einer anderen Programmiersprache verfügst, optimalerweise in einer typensicheren Sprache wie C# oder Java. Deshalb solltest du in der Lage sein, dir selbst | + | Es wird angenommen, dass du bereits über Vorwissen in einer anderen Programmiersprache verfügst, optimalerweise in einer typensicheren Sprache wie C# oder Java. Deshalb solltest du in der Lage sein, dir selbst |
- | Hier einige allgemeine Quellen: | + | Hier einige |
* Video Tutorial Reihe von The Cherno: https:// | * Video Tutorial Reihe von The Cherno: https:// | ||
- | Falls du dich auf die SOI vorbereiten möchtest, macht es Sinn, Tutorials die auf kompetitives Programmieren ausgelegt sind zu studieren: | + | Falls du dich auf die **SOI** vorbereiten möchtest, macht es Sinn, Tutorials, die auf kompetitives Programmieren ausgelegt sind zu studieren: |
* Tutorial zu Basics: https:// | * Tutorial zu Basics: https:// | ||
* Übersicht Quellen: https:// | * Übersicht Quellen: https:// | ||
Zeile 89: | Zeile 107: | ||
</ | </ | ||
- | <code cpp h.cpp> | + | <code cpp calc.h> |
void add(int, | void add(int, | ||
void sub(int, | void sub(int, | ||
Zeile 139: | Zeile 157: | ||
=== - Schritt 1: Preprocess === | === - Schritt 1: Preprocess === | ||
- | Preprozessor Statements wie include oder if werden ausgeführt. Z.B. resultiert `#include < | + | Preprozessor Statements wie include oder if werden ausgeführt. Z.B. resultiert `#include < |
Die Flag `-E` bewirkt, dass nur der Preprocess-Schritt ausgeführt wird. Beachte, dass der Output nur in der Konsole ausgegeben wird und nicht in ein File geschrieben wird. Möchte man dies, muss man dies mit `-o outputfilename` explizit angeben. | Die Flag `-E` bewirkt, dass nur der Preprocess-Schritt ausgeführt wird. Beachte, dass der Output nur in der Konsole ausgegeben wird und nicht in ein File geschrieben wird. Möchte man dies, muss man dies mit `-o outputfilename` explizit angeben. | ||
Zeile 172: | Zeile 190: | ||
</ | </ | ||
- | Beachte, dass in den Zeilen 8-10 die Zeilen aus `calc.h` einfach | + | Beachte, dass in den Zeilen 8-10 die Zeilen aus `calc.h` einfach |
- | Das File `calc.ii` wird hier nicht gezeigt, da es mehrere 10'000 Zeilen lang ist! Der Grund ist, dass der gesamte Inhalt von iostream | + | Das File `calc.ii` wird hier nicht gezeigt, da es mehrere 10'000 Zeilen lang ist! Der Grund ist, dass der gesamte Inhalt von iostream |
Ein solches `.ii` File (je nach OS auch mit Endung `.i`) wird auch **Translation Unit** genannt und beinhaltet nichts weiteres als C++-Code - auch wenn das File eine andere Endung hat. | Ein solches `.ii` File (je nach OS auch mit Endung `.i`) wird auch **Translation Unit** genannt und beinhaltet nichts weiteres als C++-Code - auch wenn das File eine andere Endung hat. | ||
Zeile 181: | Zeile 199: | ||
=== - Schritt 2: Kompilieren === | === - Schritt 2: Kompilieren === | ||
- | Danach kommt der eigentliche Kompilierungsschritt. Der preprozessierte Code wird in **Maschinencode** kompiliert. Dieser wird in einem sogenannten **Object**-File (Endung: `.o` oder `.out`) gespeichert. | + | Danach kommt der eigentliche Kompilierungsschritt. Der preprozessierte Code wird in **Maschinensprache** kompiliert. Dieser wird in einem sogenannten **Object**-File (Endung: `.o` oder `.out`) gespeichert. |
``` | ``` | ||
Zeile 236: | Zeile 254: | ||
</ | </ | ||
- | == - Schritt 2B: Kompilieren Assembly-Code | + | == - Schritt 2B: Kompilieren Assembly-Code |
- | Die Assembly-Datei (`.s`) wird dann in Maschinencode | + | Die Assembly-Datei (`.s`) wird dann in Maschinensprache |
``` | ``` | ||
as -o prog.o prog.s | as -o prog.o prog.s | ||
Zeile 257: | Zeile 275: | ||
Doch wozu braucht man diesen Linking-Schritt? | Doch wozu braucht man diesen Linking-Schritt? | ||
- | * in `prog.cpp` wird die Funktion `Add(...)` aufgerufen, welche im Headerfile `calc.h` deklariert ist. Im Preprocess-Schritt wird diese Deklaration dann in `prog` | + | * in `prog.cpp` wird die Funktion `Add(...)` aufgerufen, welche im Headerfile `calc.h` deklariert ist. Im Preprocess-Schritt wird diese Deklaration dann in `prog` |
* Auch muss der Einstiegspunkt ins Programm, sprich die main-Funktion gefunden werden. Auch dies geschieht im Linking-Schritt. | * Auch muss der Einstiegspunkt ins Programm, sprich die main-Funktion gefunden werden. Auch dies geschieht im Linking-Schritt. | ||