Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14
Über C++ Über C++ C++ ist eine in der Industrie weit verbreitete Programmiersprache. Sie wurde 1979 von Bjarne Stroustrup bei AT&T als objektorientierte Erweiterung der Programmiersprache C entworfen. Die von der ISO genormte Programmiersprache ist eine effiziente und maschinennahe Sprache und erlaubt ebenfalls ein hohes Abstraktionsniveau. Sowohl in der systemnahen Programmierung als auch in der Anwendungsentwicklung wird sie nach Abbildung: Bjarne Stroustrup wie vor in vielen Bereichen eingesetzt. Typische Anwendung findet C++ z.b. bei Betriebssystemen, Gerätetreibern, eingebetteten Systemen, Spielen und Signalprozessoren, aber auch bei Anwendungssoftware für Desktops und mobile Endgeräte. 2 / 18
Überblick 1 Über C++ 2 Der Übersetzungsvorgang Ausführen des Programms 3 / 18
, das wir kennenlernen werden, ist Hallo Welt. Es hat die einzige Aufgabe, einen Text auf dem Bildschirm auszugeben und ist in Listing 1 zu sehen. 1 # include <iostream > // stellt cout bereit 2 using namespace std; 3 4 int main () { 5 cout << " Hallo Welt!"; // Bildschirmausgabe 6 return 0; 7 } Listing 1: Hallo Welt-Programm Anhand dieses Programms lässt sich der Grundaufbau eines C++-Programms und dessen Konzepte erläutern. 4 / 18
Der Grundaufbau eines C++-Programms -- main() Das Programm wird Zeile für Zeile eingelesen und vom Compiler übersetzt. Sobald das Programm gestartet wird, beginnt der Computer mit der Ausführung an der Funktion int main() (Zeile 4 in Listing 1). Dort beginnt die Abarbeitung der Anweisungen. Wichtig: Jedes C++-Programm benötigt diese Funktion! Der allgemeine Aufbau der main()-funktion sieht so aus: int main() { } return 0; Zwischen den geschweiften Klammern ({ und }) wird die eigentliche Funktionalität dieses Programms durch weitere Anweisungen beschrieben. Mit return 0; wird an das Betriebssystem die erfolgreiche Ausführung zurückgemeldet. 5 / 18
Der Grundaufbau eines C++-Programms -- Kommentare Kommentare sind dazu da, bestimmte Informationen an den Programmierer zu liefern (z.b. was macht diese Zeile). Für das Programm haben sie keine Bedeutung und werden beim Übersetzen des Programms vom Compiler ignoriert. Kommentare steigern nicht nur die Lesbarkeit des Programms, sondern können auch dazu verwendet werden, bestimmte Zeilen vorübergehend zu entfernen. In C++ sind zwei Arten von Kommentaren möglich: // Ich bin ein einzeiliger Kommentar /* * Dieser Kommentar * umfasst mehrere Zeilen. */ Nutzen Sie Kommentare, um den Programmcode so verständlich zu machen, dass durch lesen der Anmerkungen dessen Sinn klar wird. 6 / 18
Bildschirmausgabe in C++ Über die Zeile cout << "Hallo Welt!"; wird der Text Hallo Welt auf dem Bildschirm ausgegeben. Alles was zwischen den Anführungszeichen (") steht, wird ausgegeben. Anhand der Richtung der << lässt sich erkennen, dass hier eine Ausgabe (zeigt auf cout) stattfindet. Die gesamte Anweisungszeile wird mit einem Semikolon (;) abgeschlossen. Da der Befehl cout nicht fester Bestandteil von C++ ist, muss dieser vorher über die Zeile #include <iostream> aus einer externen Bibliothek (Sammlung mehrfach verwendbarer Funktionalität) eingebunden werden. Mit using namespace std; grenzt man diesen Namensraum von anderen Bibliotheken ab, die evtl. auch cout verwenden (aber in einem anderen Kontext) und weist diesen Befehl dem Standard-Namensraum (std) zu. 7 / 18
Blöcke und Anweisungen Einfache Anweisungen (engl. statements) werden in C++ mit einem ; (Semikolon) abgeschlossen. Eine leere Anweisung wird durch ein einzelnes Semikolon in der Zeile dargestellt. cout << "Hallo Welt"; return 0; ; // Leere Anweisung Eine Zusammenfassung von Anweisungen wird als Block bezeichnet und in geschweifte Klammern ({ und }) eingeschlossen. Alle Anweisungen innerhalb dem Blocks gelten nur dort. Ein Block benötigt kein abschliessendes Semikolon. int main() { // Beginn des Blocks return 0; // Anweisung innerhalb des Blocks } // Ende des Blocks 8 / 18
Einrückungen erhöhen die Lesbarkeit des Quellcodes Es lassen sich beliebig viele Blöcke in den Programmcode einfügen. Für jede Blockebene hat sich eine Einrückung um einen Tabulatorschritt als guter Programmierstil herausgestellt, um die Lesbarkeit zu erhöhen. Endet ein Block, so wird auch die Einrückungstiefe um einen Tabstop verringert. 1 # include <iostream > 2 using namespace std; 3 4 int main () { 5 cout << " Hallo Welt "; // neue Einrueckungstiefe 6 { 7 cout << " Hallo Block "; // eine weitere Einrueckungstiefe 8 } 9 return 0; // Verringerung der Einrueckungstiefe nach Blockende 10 } In NetBeans gibt es eine nützliche Funktion unter Source Format bzw. über die Tastenkombination Alt + + F zum Formatieren des Quellcodes. Sie sollten sich jedoch angewöhnen, die Einrückungen automatisch bei der Eingabe des Quellcodes vorzunehmen. 9 / 18
Der Übersetzungsvorgang Überblick 1 Über C++ 2 Der Übersetzungsvorgang Ausführen des Programms 10 / 18
Der Übersetzungsvorgang Der Übersetzungsvorgang -- Compiler Computer können den in C++ geschriebenen Quellcode nicht direkt ausführen, da die Anweisungen nicht in Maschinensprache (Assembler) vorliegen. Deshalb muss der Quellcode zuerst von einem Compiler übersetzt werden. Er führt die folgenden Aktionen aus: Syntaxprüfung Es wird ermittelt, ob die Syntax der Programmiersprache eingehalten wurde (Schlüsselwörter, Struktur, Reihenfolge) Analyse und Optimierung Verbesserungen am Programm, welche dessen Ausführungsgeschwindigkeit oder Effizienz erhöhen Codeerzeugung Objektcode wird erzeugt, welcher der Zielsprache schon sehr ähnelt, aber noch nicht direkt ausführbar ist Zusätzlich zum Programmcode werden Headerdateien (z.b. iostream.h), die im Quellcode mit #include angegeben sind, automatisch in den Compilevorgang eingebunden. 11 / 18
Der Übersetzungsvorgang Der Übersetzungsvorgang -- Linker Aus der Objektdatei wird nun mit Hilfe des Linkers eine ausführbare Datei (.exe unter Windows) erstellt. Unterschiedliche Dateien, die beim compile-vorgang entstanden sind, werden zusammen mit den externen Bibliotheken zu einem gemeinsamen Programm verbunden. Der gesamte Vorgang sieht folgendermassen aus: 12 / 18
Der Übersetzungsvorgang Fehlermeldungen des Compilers Sollte der Programmierer Syntaxfehler (Tippfehler) oder andere Fehler im Quellcode gemacht haben, dann kann der Compiler diese melden. Jedoch werden nicht alle Fehler entdeckt (z.b. Logikfehler) und durch andere Implementierungen des Compilers können diese unterschiedliche Fehlermeldungen ausgeben. Betrachten wir dazu erneut unser Beispielprogramm, links korrekt, rechts mit Fehler: 1 # include <iostream > 2 using namespace std; 3 4 int main () { 5 cout << " Hallo Welt \n"; 6 return 0; 7 } Listing 2: Fehlerfreies Programm 1 # include <iostream > 2 using namespace std ; 3 4 int main () { 5 cout << " Hallo Welt \n" 6 return 0; 7 } Listing 3: Fehlerhaftes Programm Wir versuchen nun, dieses fehlerhafte Programm zu übersetzen und achten darauf, was der Compiler an Fehlermeldungen ausgibt. 13 / 18
Der Übersetzungsvorgang Fehlermeldungen der Compiler weisen auf Fehler hin Visual Studio 2012 Die folgende Meldung wird von Visual Studio 2012 ausgegeben: Die Ausgabe ist zwar nicht falsch, jedoch könnte die Codezeile präziser angegeben sein. g++ in NetBeans unter Windows Der Standardcompiler in NetBeans für Windows ist g++ aus der GNU Compiler Collection (GCC) über cygwin. Dieser gibt folgende Meldung aus: compile.cpp: In function int main() : compile.cpp:6: error: expected ; before return Ähnlich wie bei Visual Studio, ist auch diese Meldung nicht ganz präzise. 14 / 18
Der Übersetzungsvorgang Fehlermeldungen der Compiler weisen auf Fehler hin Clang++ ist ein neuerer Compiler, der Teil des LLVM Projekts ist und darin C++ Programme übersetzt. compile.cpp:5:23: error: expected ; after expression cout << "Hallo Welt\n" ^ ; 1 error generated. Diese Ausgabe ist wesentlich präziser (genaue Zeile) und hilfreicher, um den Fehler zu lokalisieren. Fazit Sehen Sie sich also die Ausgaben des Compilers genau an, er gibt Ihnen wichtige Hinweise und Lösungsvorschläge zu Fehlern im Programmcode. 15 / 18
Ausführen des Programms Überblick 1 Über C++ 2 Der Übersetzungsvorgang Ausführen des Programms 16 / 18
Ausführen des Programms Das Programm ausführen In Praktikum 1 wird beschrieben, wie Sie das Programm mit NetBeans ausführen können. Demo 17 / 18
Fragen?