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
./hello
Hello 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: