Prof. Dr. Malte Schilling
Autonomous Intelligent Systems Group
C++ und C sind (wie Java) Programmiersprachen, die vor der Ausführung mithilfe eines Compilers in ein ausführbares Programm übersetzt werden müssen.
sudo apt-get install gcc./helloHello world!Beim Übersetzen in ein ausführbares Programm werden folgende Schritte durchgeführt:
#include).Problem: Kompilieren „per Hand“ von umfangreichen Projekten mit vielen Headern, Quelltextdateien und Abhängigkeiten zu externen Bibliotheken kann sehr umständlich und fehleranfällig sein.
Mögliche Lösungen:
make, liest Makefile ein, in dem die Abhängigkeiten des Übersetzungsprozesses erfasst sind → Nachteil: auch Makefiles sind nicht portabel.make benötigt. Wie gcc/g++ ist make nicht nativ für Windows vorhanden. Daher MinGW oder Cygwin.make aufgabe).Bei größeren Projekten trennt man meist Deklarationen und Definitionen in - Header-Dateien und - Implementierungs-Dateien
→ Erlaubt separate Kompilierung/Verwendung von Prebuilt-Libraries.
Beim Kompilieren müssen alle Implementierungsdateien angegeben werden: gcc -Wall -o foo max.c foo.c
Die Aufeilung in Header und Implementierung ist nicht immer einfach. Generell gilt:
int max( int , int ); – hier dürfen die Namen der Parameter entfallen.Warum gibt es die Unterscheidung zwischen Definition und Deklaration?
Header-Dateien können versehentlich mehrfach eingebunden werden.
Beispiel: A bindet H ein, B bindet H und A ein. Dadurch wird H in B zweimal eingebunden.
→ Fehler, falls in H z.B. eine Funktion definiert wird.
#ifndef geschützt werden.&.NULL – „Zeiger ins Nichts“.*.T ist T*.ptr[i] == *(ptr+i)T[] als Parameter an eine Funktion, „verfällt“ der Typ zum entsprechenden Pointer T* (Array Decaying).T ist T&.| Pointer | Referenzen | |
|---|---|---|
| Initialisierung | int* ip = &i; |
int& ir = i; |
| Zugriff lesend | *ip |
ir |
| Zugriff schreibend | *ip = 5; |
ir = 5; |
| Kann ins „Nichts“ zeigen | Ja | Nein |
| Kann neu zugewiesen werden | Ja | Nein |
Beispiel: