Erste Schritte mit C++
Content |
Zunächst sollten Sie überprüfen, ob Ihnen ein geeigneter Compiler zur Verfügung steht. Dies geht in einem Shell-Fenster am einfachsten mit dem Kommando gcc --version:
theon$ gcc --version gcc (GCC) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. theon$
Sie können sich von überall mit ssh login@theon.mathematik.uni-ulm.de auf der Theon anmelden, wobei login Ihr Benutzername bei uns ist (identisch zu dem bei SLC). Wenn Sie noch keinen Zugang bei uns haben, sollten Sie sich bei SLC anmelden. Bei mehr als sechs-stelligen Matrikelnummern sollte das über https://anmelden.mathematik.uni-ulm.de erfolgen. Vergessen Sie nicht, sich anschließend für diese Vorlesung anzumelden und geben Sie uns bis zu einem Tag, bis Ihr Zugang eingerichtet ist.
Wenn Sie bei gcc noch eine veraltete Fassung sehen, müssen Sie Ihren Zugang mit Hilfe der Datei ~/.options noch etwas umkonfigurieren:
theon$ gcc --version gcc (GCC) 4.8.2 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. theon$ echo ballinrobe >>~/.options theon$ . /etc/profile theon$ gcc --version gcc (GCC) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. theon$
Diese Anpassung ist nur ein einziges Mal notwendig.
Wenn Sie auf einem der Maschinen in unserem Pool E.44 arbeiten, sollten Sie gcc-8.3 verwenden:
heim$ gcc-8.3 --version gcc-8.3 (GCC) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. heim$
Der C++-Compiler der 7- und 8-er-Reihe von GCC unterstützt per Voreinstellung C++14 mit einigen Erweiterungen des GCC. Für C++17 wird die Option -std=c++17 bzw. -std=gnu++17 benötigt, aber momentan ist das noch nicht relevant.
Zu Beginn ist es ratsam, ein Übungsverzeichnis anzulegen, um dort die ersten Programme anzulegen:
theon$ pwd /home/borchert theon$ mkdir -p pp/session01 && cd pp/session01 theon$ pwd /home/borchert/pp/session01 theon$
Das pwd-Kommando (print working directory) nennt das Verzeichnis, in dem wir uns gerade befinden. Mit mkdir (make directory) wird ein Verzeichnis angelegt. Mit der Option -p kann hier auch sogleich eine Verzeichnishierarchie angelegt werden, wobei es nicht stört, wenn Verzeichnisse bereits existieren. Mit dem cd-Kommando (change directory) wechseln wir in das neue Verzeichnis.
Wenn Sie im folgenden Programmtext in einer Datei entwickeln, sollten Sie einen dafür geeigneten Editor verwenden. Meine Empfehlung ist hier der vim. Wenn Sie zusätzlich auch noch eine Interaktion mit der Maus wünschen, können Sie auch den gvim verwenden. Wenn Sie mit dem vim noch nie eine Berührung hatten, empfiehlt sich der Aufruf von vimtutor, der Sie innerhalb einer halben Stunde in die Benutzung einführt. Diese Zeit ist gut investiert und dies geschieht am besten sogleich am Anfang.
Aufgabe
-
Erstellen Sie mit dem Editor in Ihrem Arbeitsverzeichnis für diese Sitzung ein C++-Programm folgenden Inhalts und speichern Sie es in der Datei hello.cpp ab:
#include <iostream> int main() { std::cout << "Hello, world!" << std::endl; }
Es handelt sich dabei um ein einfaches Hello-World-Programm. Mit #include <iostream> steht die Standard-Bibliothek für Ein- und Ausgaben zur Verfügung (diese wird durch den Präprozessor in den zu übersetzenden Text eingefügt). Anders als in Java wird keine Klasse für die main-Funktion benötigt. Stattdessen verwenden wir wie in C eine einfache Funktion, die int zurückliefert. Die Funktion kann Parameter für die Kommandozeilenparameter haben, diese werden hier aber nicht benötigt und können daher weggelassen werden.
In C++ können Operatoren überladen werden, so auch die Shift-Operatoren << und >>. Die Ein- und Ausgabe-Bibliothek überladet den << hier für Ausgabe-Operationen. Da der Operator links-assoziativ ist, wird er wie folgt ausgewertet:
std::cout << "Hello, world!" << std::endl /* | | | \------------v-------------/ | liefert std::cout | | | \----------v----------/ liefert std::cout */
Ausgabe-Operatoren können somit kaskadiert werden. Sie funktionieren für alle elementaren Datentypen und können für weitere Datentypen definiert werden. std::endl steht für einen Zeilentrenner.
-
Übersetzen Sie Ihr Programm mit dem folgenden Kommando:
theon$ g++ -Wall -o hello hello.cpp theon$
Im Idealfall gibt es keine Fehlermeldung. Mit der Option -Wall schalten Sie alle Warnungen ein. Kleine Vertipper wie etwa ein fehlendes Semikolon führen zu Ausgaben wie folgt:
theon$ g++ -Wall -o hello hello.cpp hello.cpp: In function 'int main()': hello.cpp:5:1: error: expected ';' before '}' token } ^ theon$
-
Führen Sie Ihr Programm aus:
theon$ ./hello Hello, world! theon$