C++/Tutorial: 1. Einrichten der Arbeitsumgebung und cout
Inhaltsverzeichnis
C++ lernen
C++ ist eine Programmiersprache, die ihren Ursprung in C hat. 1983 wurde sie von Bjarne Stroustrup veröffentlicht und war zunächst eine Erweiterung der Sprache C um objektorientierung. Mittlerweile handelt es sich bei C++ um eine moderne multiparadigmische Sprache, die in der Spieleentwicklung sicher die vorherschende, wenn auch nicht die einfachste ist und auch in vielen anderen Bereichen weit verbreitet ist, darunter auch Desktop Applications, in Betriebssystemen, in Handys und anderen Embedded Systems(alles wo Software drauf läuft). Im Laufe dieses Tutorials werden wir uns dieser umfangreichen Sprache nähern.
Arbeitsumgebung einrichten?
C++ wird in Maschienensprache kompiliert, das heißt, dass der von Menschen geschriebene und menschenlesbare Quellcode in für den Computer verständlichen Maschienencode
übersetzt wird. Das Resultat kann zum Beispiel eine ausführbare Datei sein, wie die allseits bekannten .exe Dateien und benötigt auch (nicht zwangsweise) keine Laufzeitumgebung wie zum Beispiel Java.
Um denn Quellcode(der als normale Textdatei vorliegt) zu übersetzen brauchen wir also einen Compiler, dazu noch einen Linker, der aus den übersetzten Dateien dann die ausführbare Datei erstellt - wobei das normalerweise in einem ist -, einen Editor um den Quellcode angenehm verfassen zu können, einen Debugger um Fehler im Programm aufzuspüren, einen Profiler um Performanceprobleme aufspüren zu können und und und..
ganz schön viel, man kann diese Programme auch alle einzeln verwenden (wie ich es auch tue), aber für Anfänger ist eine IDE, also eine integrierte Entwicklungsumgebung zu empfehlen.
Integrierte Entwicklungsumgebungen
- Microsoft Visual C++ 2008 Express Edition
- Vermutlich die beste IDE, aber der Compiler beschränkt sich auf Windows, für plattformunabhängige Entwicklung ist der enthaltene (gleichnamige) Compiler ungeeignet
- http://www.microsoft.com/express/vc/
- Code::Blocks
- Eine IDE, die für Anfänger sehr zu empfehlen ist, da sie mächtig und einfach ist. Zudem verwendet sie die GCC, ist also plattformunabhängig
- http://www.codeblocks.org/
- Eclipse CDT
- Eclipse CDT ist ebenfalls eine sehr mächtige IDE, aber für Anfänger evtl. etwas schwierig zu bedienen, auch sie verwendet die GCC
- http://www.eclipse.org/downloads/
- Netbeans
- Ebenso wie Eclipse vorrangig eine Java IDE, ist sie auch für C++ mittlerweile gut zu gebrauchen
- http://netbeans.org/features/cpp/
- Qt Creator
- Vermutlich ungeeignet, da diese IDE nicht für Spiele, sondern für die GUI Entwicklung mit Qt gedacht ist, aber dennoch recht nett
- http://www.qtsoftware.com/products/developer-tools
Hallo Welt
Das typische Programm um zu testen ob die Arbeitsumgebung korrekt eingerichtet ist, ist das Hallo Welt! Programm, dass Hallo Welt! in der Konsole ausgibt.
Bitte bedenkt, dass das Programm normalerweise sofort geschlossen wird, manche IDEs die Konsole aber offen halten. Um eine überall funktionierende Version bereit zu stellen, verlangt das folgende Programm zum abschluss noch einen Druck auf Enter. Kopiert das Programm einfach und versucht es auszuführen, die Erklärung folgt.
#include <iostream> using namespace std; int main() { cout << "Hallo Welt!" << endl; cin.get(); }
Kurze Erklärung
An dieser Stelle möchte ich noch einmal einen kleinen Überblick über das Programm verschaffen, zum tieferen Einblick ist es allerdings noch zu früh:
Zunächst einmal werden mit
#include <iostream> using namespace std;
die nötigen Anweisungen verfügbar gemacht, das eigentliche Programm, kann dann für den Augenblick erstmal in den geschweiften Klammern stattfinden, dort wird mit
cout << "Hallo Welt!" << endl;
Hallo Welt! auf der Konsole ausgegeben und mit
cin.get();
ein Druck auf Enter angefordert, der die Konsole daran hindern solls ich sofort zu schließen(das Programm ist nach erreichen der schließenden geschweiften Klammern auch beendet!)
Standardausgabestrom cout
An dieser Stelle möchte ich nochmal auf den Standardausgabestream cout zu sprechen kommen.
Wenn wir "in den Ausgabestrom schreiben" heißt das nichts anderes, als dass wir auf die Konsole schreiben.
Eingeleitet wird das ganze mit cout, dann folgen mit dem << Operator abgetrennt die Dinge, die auf die Konsole geschrieben werden.
Das heißt in unserem Fall schreiben wir zunächst das Literal "Hallo Welt!" in den Ausgabestrom und anschließend den Manipulator endl, was das bedeuted werde ich nun erläutern.
"Hallo Welt!"
Bei "Hallo Welt!" handelt es sich um ein Stringliteral. Ein Literal ist einfach ein Wert, der direkt in den Quellcode geschrieben wurde, ein String ist eine Zeichenkette, ein Stringliteral ist also im Prinzip einfach ein Text. Um einen solchen Text zu kennzeichnen(ansonsten könnte der Compiler ja nicht zwischen Anweisungen und Stringliteralen unterscheiden) wird dieser in Anführungszeichen "" gesetzt. Bei "Hallo Welt!" handelt es sich also einfach um den Text "Hallo Welt!" und mit
cout << "Hallo Welt!";
würden wir schon "Hallo Welt!" auf die Konsole schreiben.
endl
Nun ist auch klar, warum
cout << endl;
beziehungsweise
cout << "Hallo Welt!" << endl;
nicht einfach "endl" auf die Konsole schreibt, denn hierbei handelt es sich nicht um ein Stringliteral, also nicht einfach um einen Text, sondern um ein Stück code mit Bedeutung. Und zwar handelt es sich bei endl um einen sogenannten Manipulator, diese werden in den Datenstrom geschrieben um den Datenstrom zu modifizieren. endl hat gleich 2 Wirkungen, zum einen wird ein Zeilenumbruch in den Datenstrom geschrieben, zum anderen wird cout geflusht, das heißt gegebenfalls zwischengespeicherte Daten werden nun endgültig ausgegeben. Man kann auch beides seperat erreichen, für den Zeilenumbruch gibt es für Strings sogenannte Escape-Sequenzen, welche mit einem \ eingeleitet werden und spezielle Zeichen ausgeben sollen(Siehe auch Wikipedia). An dieser Stelle sei als wichtige Escapesequenz \n genannt, welche einen Zeilenumbruch darstellen würde - um zu zeigen wie das funktioniert, ein Beispiel:
cout << "Hallo Welt!\n";
\n wird also einfach in das Stringliteral geschrieben und dann als Zeilenumbruch interpretiert. Wenn man ein \ oder ein " ausgeben will, gibt es hierfür übrigens auch die Escapesequenzen \" und \\.
Nun wird der Ausgabestrom aber noch nicht geflusht, also bei dieser Anweisung könnten noch Dinge zwischengespeichert werden, ohne sofort ausgegeben zu werden. Es gibt allerdings auch einen Manipulator, der nur flusht und keinen Zeilenumbruch beinhaltet, dieser nennt sich auch flush.
cout << "Hallo Welt!\n" << flush;
ist also äquivalent zu
cout << "Hallo Welt!" << endl;
;
Ja das Semikolon. Vielleicht ist es schon aufgefallen, aber in C++ werden Anweisungen mit einem Semikolon beendet. Das Semikolon alleine ist übrigens auch schon eine Anweisung, eine leere Anweisung.
Es ist in C++ also auch möglich mehrere Anweisungen in eine Zeile zu schreiben, da der Zeilenumbruch keine semantische Bedeutung für den Compiler hat (aber vorsicht! das gilt nicht für den Präprozessor, das heißt für Anweisungen, die mit # beginnen), allerdings sollte der Programmierer immer eine gewisse Ordnung in seinem Code haben und mehrere
Anweisungen in einer Zeile zu haben ist wirklich unschön.