====================== Erste Schritte mit C++ [TOC] ====================== 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`: ---- CODE (type=sh) ----------------------------------------------------------- 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: ---- CODE (type=sh) ----------------------------------------------------------- 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. :links: SLC -> https://slc.mathematik.uni-ulm.de Wenn Sie auf einem der Maschinen in unserem Pool E.44 arbeiten, sollten Sie `gcc-8.3` verwenden: ---- SHELL (path=session01,hostname=heim) ------------------------------------- gcc-8.3 --version ------------------------------------------------------------------------------- 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: ---- CODE (type=sh) ----------------------------------------------------------- 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: ---- CODE (type=cpp) ------------------------------------------------------- #include int main() { std::cout << "Hello, world!" << std::endl; } ---------------------------------------------------------------------------- Es handelt sich dabei um ein einfaches Hello-World-Programm. Mit `#include ` 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: ---- CODE (type=cpp) ------------------------------------------------------- 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: ---- CODE (type=sh) -------------------------------------------------------- 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: ---- CODE (type=sh) -------------------------------------------------------- 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: ---- CODE (type=sh) -------------------------------------------------------- theon$ ./hello Hello, world! theon$ ---------------------------------------------------------------------------- :navigate: up -> doc:index next -> doc:session01/page02