Spieleprogrammierung mit DirectX - *ISBN 978

Werbung
jetzt lerne ich
Spieleprogrammierung
mit DirectX
Der einfache Einstieg in die
C++-Programmierung
CHRISTIAN ROUSSELLE
Das erste Programm
jetzt lerne ich
KAPITEL 3
In diesem Kapitel lernen Sie den Umgang mit Code::Blocks kennen. Sie legen Ihr erstes Projekt an und schreiben ein erstes kurzes C++-Programm.
3.1
Einführung in Code::Blocks Studio
Starten Sie Code::Blocks Studio über die Verknüpfung, die während der Installation angelegt wurde. Falls Sie keine Verknüpfung angelegt haben,
können Sie das Programm auch über das Startmenü starten. Sie finden das
Programm unter START/ALLE PROGRAMME/CODEBLOCKS/CODEBLOCKS.
Wenn Sie das Programm zum ersten Mal starten, werden Sie zunächst gefragt, ob Sie C/C++-Dateien mit Code::Blocks verknüpfen wollen. Wenn Sie
hier JA wählen, werden künftig alle C/C++-Dateien automatisch mit
Code::Blocks geöffnet. Wenn Sie NEIN wählen, bleiben die bisherigen Verknüpfungen bestehen. Wenn Sie bislang keine IDE im Einsatz haben, können Sie den Dialog mit JA bestätigen.
Als Nächstes sucht Code::Blocks nach Compilern, die auf Ihrem System installiert sind, und zeigt, wie in Abbildung 3.1 zu sehen, einen Dialog mit einer Liste der auf Ihrem System gefundenen Compiler.
31
jetzt lerne ich
3 Das erste Programm
Abb. 3.1:
Liste der von
Code::Blocks
gefundenen
Compiler
Wenn Sie das Visual C++ Toolkit 2003 installiert haben, sollte dieser Compiler in dem Dialog aufgelistet werden. Wenn dies der einzige Compiler ist,
den Sie auf Ihrem System installiert haben, wird auch nur bei diesem der
Status DETECTED angezeigt. Wählen Sie das Toolkit aus, klicken Sie auf SET AS
DEFAULT und danach auf CLOSE. Dadurch wird das Visual C++ Toolkit 2003 als
Standard-Compiler in Code::Blocks verwendet.
Abb. 3.2:
Code::Blocks
IDE
Nachdem Sie den Compiler ausgewählt haben, sehen Sie die eigentliche
IDE (Abbildung 3.2). Im Fenster TIP OF THE DAY werden Ihnen Konfigurationsmöglichkeiten und Tipps zum Umgang mit Code::Blocks angezeigt.
32
Einführung in Code::Blocks Studio
jetzt lerne ich
Konfiguration von Code::Blocks
Vor der Nutzung von Code::Blocks müssen Sie die IDE zunächst konfigurieren. Dazu gehören die Angabe des Pfads des Compilers, die Einstellung von
Compiler-Optionen sowie die Angabe der Pfade für Header-Dateien und Libraries. Wählen Sie aus dem Menü BUILD den Eintrag COMPILER OPTIONS. Die folgende Abbildung zeigt den Konfigurationsdialog, der dann geöffnet wird.
Abb. 3.3:
Compiler-Einstellungen
Wie in Abbildung 3.3 dargestellt, können Sie in diesem Dialog COMPILER FLAGS
angeben. Wählen Sie folgende Einstellungen:
쐽 Enable warnings level 3
쐽 Maximize Speed
쐽 Enable C++ Exception Handling
쐽 __cdecl calling convention
쐽 Single-threaded Runtime Library
Bei den hier vorgenommenen Einstellungen handelt es sich um die gleichen
Compiler-Einstellungen, die auch von Visual C++.NET 2003 verwendet
werden. Die erste Einstellung legt fest, dass Compiler-Warnungen ausgegeben werden. Compiler-Warnungen sind in verschiedene Klassen unterteilt.
Dabei werden in Warning Level 3 alle Warnungen angezeigt, die Einfluss
auf den Ablauf Ihres Programms haben können. Die Einstellung Maximize
33
jetzt lerne ich
3 Das erste Programm
Speed sorgt dafür, dass der Compiler ein geschwindigkeitsoptimiertes Programm erzeugt.
Die genaue Bedeutung der letzten drei Einstellungen sind schwer zu verstehen, wenn Sie bisher noch nicht intensiv mit einem Compiler gearbeitet
haben. Dies stellt jedoch kein Problem dar, da diese Optionen zunächst keinen Einfluss auf Ihre Arbeit mit dem Compiler haben.
Wenn die Option Enable C++ Exception Handling aktiviert ist, sind Sie in
der Lage, einen speziellen C++-Mechanismus zu nutzen, um auf unvorhergesehene Fehlerzustände in Ihrem Programm zu reagieren. Mit der Einstellung der Calling convention legen Sie fest, auf welche Weise Parameter an
Funktionen übergeben werden und wie Funktionsnamen zusammengesetzt
werden. Die Option Single-threaded Runtime Library sollten Sie verwenden, wenn Sie Programme schreiben, die nicht mit mehreren Threads, d.h.
mehreren parallelen Ausführungsebenen (Multithreading), arbeiten. In diesem Buch werden keine Programme entwickelt, die mit mehreren Ausführungsebenen arbeiten.
1
Wenn Sie an weiteren Informationen zu den Compiler-Einstellungen interessiert sind, können Sie diese auf der Website der MSDN-Library unter http://msdn.microsoft.com/library finden. Wie Sie das Hilfesystem
nutzen, wird im Kapitel MSDN – das Hilfesystem erläutert.
Nachdem Sie die COMPILER FLAGS eingestellt haben, empfiehlt es sich, die Verzeichnisse anzugeben, in denen der Compiler nach Header- und Bibliotheksdateien suchen soll. Wählen Sie dazu im Compiler SETTINGS-DIALOG den
Reiter DIRECTORIES und dort den Reiter COMPILER. Stellen Sie hier den Pfad zu
dem Ordner include des Platform SDK ein (siehe Abbildung 3.4). Dort sollte
sich bereits der Pfad zum include-Ordner des Visual C++ Toolkit 2003 befinden. Wenn dies nicht der Fall ist, ergänzen Sie den Pfad, wie in Abbildung 3.4 dargestellt. Achten Sie auch darauf, dass die Pfade in der gleichen
Reihenfolge wie in der Abbildung angegeben werden. Die Reihenfolge
können Sie über die beiden Pfeile an der rechten Seite ändern.
Wechseln Sie danach zum Reiter LINKER (unterhalb des Reiters DIRECTORIES)
und geben Sie dort, wie in Abbildung 3.5 zu sehen, die Pfade zu den libOrdnern des Platform SDK und des Visual C++ Toolkit 2003 an. Auch hier
sollte der Pfad zum Visual C++ Toolkit 2003 schon vorhanden sein.
34
Einführung in Code::Blocks Studio
jetzt lerne ich
Abb. 3.4:
Einstellung
des Ordners
für IncludeDateien
Abb. 3.5:
Einstellung
des Ordners
für Bibliotheksdateien
35
3 Das erste Programm
jetzt lerne ich
Nachdem Sie den COMPILER SETTINGS-Dialog mit OK bestätigt haben, ist die
Konfiguration von Code::Blocks abgeschlossen.
Klicken Sie als Letztes auf den Menüpunkt SETTINGS und wählen Sie dort den
Punkt ENVIRONMENT. Wechseln Sie in dem Dialogfenster, das daraufhin angezeigt wird, in den Reiter VIEW und stellen Sie sicher, dass der Punkt OPEN
BLANK WORKSPACE gesetzt ist (siehe Abbildung 3.6).
Abb. 3.6:
Änderung der
WorkspaceEinstellungen
Die Auswahl dieser Option erleichtert die Projektverwaltung von Code::
Blocks.
1
In den nächsten Kapiteln, beispielsweise wenn die Windows- und DirectX-Programmierung vorgestellt wird, müssen Sie noch weitere Compiler-Einstellungen in Code::Blocks vornehmen.
3.2
Projekte anlegen
Um in Code::Blocks ein Programm zu entwickeln, müssen Sie zunächst ein
Projekt anlegen. In einem Projekt werden alle Dateien zusammengefasst,
die für das ausführbare Programm benötigt werden. Außerdem legen Sie in
den Projekteinstellungen Compiler- und Linker-Optionen für das zu erstellende Programm an. Es empfiehlt sich, einen Ordner für alle Projekte, die Sie
im Laufe der Lektüre dieses Buchs entwickeln werden, anzulegen. Dies
könnte beispielsweise der Pfad C:\ENTWICKLUNG sein. Alternativ können Sie
auch einen Ordner ENTWICKLUNG im Ordner EIGENE DATEIEN anlegen.
Um ein Projekt anzulegen, wählen Sie aus dem FILE-Menü in Code::Blocks
den Eintrag NEW PROJECT. Alternativ können Sie auch nach dem Starten von
Code::Blocks auf CREATE A NEW PROJECT im Reiter START HERE klicken. Danach erscheint folgender Dialog:
36
Projekte anlegen
jetzt lerne ich
Abb. 3.7:
Neues Projekt
anlegen
Die Abbildung zeigt einen Dialog, in dem Sie die Art Ihres Projekts festlegen.
Jeder dieser Einträge symbolisiert eine spezielle Projekt- bzw. Anwendungsart. Der Zweck dieser Projektauswahl ist es, dem Programmierer Arbeit abzunehmen. Code::Blocks ist in der Lage, ein Gerüst für jede dieser
Anwendungsarten zu erzeugen. Dieses Gerüst muss der Programmierer
noch erweitern und an seine eigenen Bedürfnisse anpassen.
Wenn Sie beispielsweise eine Windows-Anwendung erstellen wollen, in
der ein Fenster angezeigt wird, wählen Sie hier den Projekttyp WIN32 GUI
APPLICATION.
Mehr zum Thema Windows-Anwendungen erfahren Sie im Kapitel
Grundlagen der Windows-Programmierung. Für den Anfang arbeiten Sie
zunächst mit Konsolenanwendungen.
1
Wählen Sie in diesem Dialog eine CONSOLE APPLICATION und achten Sie darauf,
dass das Häkchen DO NOT CREATE ANY FILES gesetzt ist. Geben Sie den Pfad, z.B.
C:\ENTWICKLUNG an, in dem das Projekt angelegt werden soll. Außerdem müssen Sie einen Projektnamen festlegen. Nennen Sie das Projekt, wie in der
Abbildung gezeigt, HELLO WORLD. Es ist eine Art Tradition, das erste Programm
in einem Buch, das sich mit Programmiersprachen beschäftigt, so zu nennen.
37
jetzt lerne ich
3 Das erste Programm
Nachdem Sie auf CREATE geklickt haben, erscheint, wie in der folgenden
Abbildung zu sehen, ein weiterer Dialog.
Abb. 3.8:
Festlegen des
Standardverzeichnisses
Mithilfe dieses Dialogs können Sie festlegen, dass der Pfad C:\ENTWICKLUNG
künftig als Standardpfad für neue Projekte verwendet wird. Bestätigen Sie
diesen Dialog durch Drücken auf den JA-Knopf. Daraufhin wird das Projekt
angelegt und die Code::Blocks-IDE hat das in Abbildung 3.9 gezeigte Aussehen. Wie Sie sehen, ist die IDE in Komponenten aufgeteilt, deren Funktion im Folgenden erläutert wird.
Abb. 3.9:
Code::Blocks
nach dem
Anlegen des
Projekts
38
Projekte anlegen
jetzt lerne ich
Standardsymbolleiste
Die Standardsymbolleiste enthält bekannte Windows-Funktionen wie Öffnen, Speichern, Kopieren, Einfügen, Wiederherstellen, Suchen und Ersetzen. Sie finden hier aber auch Buttons zum Anlegen neuer Projekte oder Dateien.
Compiler-Leiste
Diese Leiste ermöglicht den schnellen Zugriff auf die Compiler-Funktionen
von Code::Blocks. Sie können das Programm, das Sie entwickeln, so auf
einfache Weise übersetzen und ausführen.
Debugger-Leiste
Über diese Leiste haben Sie schnellen Zugriff auf Debugging-Funktionen.
Mit diesen Funktionen können Sie Ihre Programme überwachen oder bis zu
vorher definierten Haltepunkten ausführen lassen. Momentan stehen Debugging-Funktionalitäten in Code::Blocks für das Visual C++ Toolkit 2003
noch nicht zur Verfügung.
Projektmanager
Der Projektmanager zeigt den Arbeitsbereich mit allen momentan geöffneten Projekten an. Außerdem erhalten Sie hier Informationen über verschiedene Eigenschaften der Projekte. Dazu gehört beispielsweise eine Liste aller
momentan geöffneten Dateien. Sie können sich außerdem alle zu einem
Projekt gehörenden Dateien anzeigen lassen. Zudem werden hier Symbole
wie z.B. Funktions-, Klassen- oder Variablennamen angezeigt.
Editorbereich
Im Editorbereich erledigen Sie alle Aufgaben, die die Bearbeitung von
Quellcode betreffen. Hier geben Sie den Quellcode für Ihre Programme ein
und überarbeiten diese. Der Quellcode wird dabei von Code::Blocks farblich
aufbereitet. Es ist möglich, mehrere Quelltextfenster gleichzeitig im Editorbereich zu öffnen. Mit Hilfe des Projektmanagers ist es außerdem möglich,
an bestimmte Quelltextstellen zu springen.
Ausgabebereich
Im Ausgabe- oder Nachrichtenbereich werden Informationen über den Fortschritt der Kompilierung und des Linkens ausgegeben. Hier werden auch
Warnungen und Fehler angezeigt, die beim Übersetzen des Programms aufgetreten sind. Außerdem können Sie sich hier die Ergebnisse einer Suche
anzeigen lassen.
39
3 Das erste Programm
jetzt lerne ich
3.3
Hello World
Es ist endlich so weit! In diesem Abschnitt schreiben Sie Ihr erstes Programm. Dazu müssen Sie zunächst eine Quellcodedatei anlegen. Wählen
Sie im FILE-Menü von Code::Blocks NEW FILE. Nun erscheint ein Dialog, in dem
Sie den Pfad und den Namen der neuen Datei angeben müssen.
Abb. 3.10:
Neue Datei
anlegen
Wenn Sie sich noch nicht im gleichen Verzeichnis befinden, in dem Sie das
Projekt angelegt haben, wechseln Sie dorthin und ändern Sie den Namen
der Datei von UNTITLED1 in HELLO WORLD.CPP (siehe Abbildung 3.10). Klicken Sie
auf SPEICHERN. Danach erscheint der folgende Dialog, in dem Sie entscheiden
müssen, ob die neu angelegte Datei zum Projekt hinzugefügt werden soll.
Bestätigen Sie diesen Dialog mit JA.
Abb. 3.11:
Erstellte Datei
zum Projekt
hinzufügen?
Code::Blocks öffnet jetzt ein neues, leeres Fenster mit dem Titel HELLO
WORLD.CPP. cpp steht dabei für C++ (C-Plus Plus) und ist die Standarderweiterung für C++-Quellcodedateien. Das folgende Listing enthält das Programm Hello World.
40
Hello World
#include <iostream>
using namespace std;
int main(void)
{
cout << "Hello World\n";
}
jetzt lerne ich
Listing 3.1:
Das erste Programm Hello
World
Geben Sie das Programm aus Listing 3.1 in das Quelltextfenster mit dem Titel HELLO WORLD.CPP ein. Achten Sie bei der Eingabe unbedingt auf die richtige
Schreibweise. C++ ist case-sensitive. Das bedeutet, dass in C++ zwischen
Groß- und Kleinschreibung unterschieden wird.
Klicken Sie nach der Eingabe des Programms auf den blauen Button mit
dem Zahnradsymbol, das Sie in der Compiler-Leiste finden, um das Programm zu übersetzen. Alternativ dazu können Sie auch Ÿ+Ñ drücken. Code::Blocks kompiliert das Programm und erstellt die ausführbare
Datei Hello World.exe.
Wenn sich bei der Eingabe des Programms ein Fehler eingeschlichen haben
sollte, wird der Compiler an der betreffenden Stelle eine Fehlermeldung
ausgeben. Verbessern Sie den Fehler und übersetzen Sie das Programm danach erneut.
Bei fehlerfreier Kompilierung erscheinen die folgenden Meldungen im Ausgabebereich von Code::Blocks.
Abb. 3.12:
Ausgabebereich nach
erfolgreicher
Kompilierung
Jetzt können Sie das Programm ausführen. Klicken Sie dazu auf das PlaySymbol, das Sie ebenfalls in der Compiler-Leiste finden. Alternativ können
Sie auch Ÿ+Ò drücken oder RUN aus dem COMPILE-Menü wählen. Danach wird das Programm in einem Kommandozeilenfenster, wie in der folgenden Abbildung dargestellt, ausgeführt.
41
3 Das erste Programm
jetzt lerne ich
Abb. 3.13:
Das Programm Hello
World in
Aktion
Das Fenster bleibt so lange offen, bis Sie die þEnterÿ- bzw. Æ-Taste drücken.
1
Sie können das Programm auch ausführen, indem Sie in das Verzeichnis
wechseln, in dem sich das Projekt Hello World befindet. Dort finden Sie
eine Datei mit dem Namen Hello World.exe, die Sie starten können. Das
Programm lässt sich also auch ohne Code::Blocks wie eine normale Anwendung ausführen.
Nachdem Sie nun gesehen haben, was beim Ausführen und Übersetzen des
Programms geschieht, sollten Sie einen genaueren Blick auf das Programm
werfen, damit Sie verstehen, was der Quellcode bedeutet:
Listing 3.2:
Hello World
mit Zeilennummerierung
01:
02:
03:
04:
05:
06:
07:
08:
#include <iostream>
using namespace std;
int main(void)
{
cout << "Hello World\n";
}
Das Listing ist hier mit Zeilennummern dargestellt. Die Nummerierung dient
lediglich dazu, gezielt auf bestimmte Zeilen im Code eingehen zu können
und diese näher zu erläutern. Sie dürfen die Zeilennummern (und die Doppelpunkte) nicht eingeben. In C++ sind Zeilennummerierungen, anders als
z.B. in alten Versionen von Basic, nicht vorgesehen und führen zu Fehlermeldungen.
42
Hello World
jetzt lerne ich
Reservierte Wörter und Schlüsselwörter
Die erste Zeile enthält die Anweisung #include <iostream>. Wie Sie vielleicht festgestellt haben, stellt Code::Blocks #include in grüner Schrift dar.
Alle bekannten C++-Anweisungen und Schlüsselwörter werden in Code::Blocks farblich hervorgehoben. Schlüsselwörter sind Wörter, die zum
Sprachumfang von C++ gehören und jeweils eine bestimmte definierte Bedeutung haben.
Mit #include <iostream> wird die Datei iostream mit in den Kompilierungsvorgang eingebunden. Die Datei iostream gehört zum Funktionsumfang von C++ und bietet beispielsweise die Möglichkeit, Zeichen auf den
Bildschirm auszugeben oder Eingaben von der Tastatur entgegenzunehmen.
Die Raute (#), gefolgt von einer Anweisung, veranlasst den Präprozessor –
ein Hilfsprogramm, das vor der eigentlichen Kompilierung ausgeführt wird
–, den Quellcode zu modifizieren. Der Präprozessor ersetzt dabei die Zeile
#include <iostream> durch den Inhalt der Datei iostream. Erst danach
führt der Compiler die Übersetzung des Quellcodes durch.
Die dritte Zeile enthält die Anweisung using namespace std;. Diese Anweisung sorgt dafür, dass Sie die Funktionen, die in der Datei iostream definiert sind, verwenden können.
Für den Moment müssen Sie diese zugegebenermaßen unbefriedigende
Erklärung akzeptieren. Wie Sie später im Kapitel über die C++ Standard
Library und Namespaces sehen werden, hat diese Anweisung eine ganz
bestimmte Bedeutung.
1
Das eigentliche C++-Programm beginnt in der fünften Zeile mit der main()Funktion. Jedes C++-Programm verfügt über eine main()-Funktion. Diese
Funktion wird immer als Erstes beim Start eines Programms ausgeführt.
Eine Funktion in C++ ist ein zusammengehöriger Quellcodeteil, der aus einer oder mehreren Anweisungen besteht. Dieser Quellcodeteil wird in geschweifte Klammern {...} gefasst. Einen durch {...} zusammengefassten
Programmteil bezeichnet man auch als Block. Direkt vor der main()-Funktion steht das Schlüsselwort int. Dieses Schlüsselwort gibt an, dass die
main()-Funktion einen Wert vom Typ int zurückgibt. Bei diesem Typ handelt es sich um einen Ganzzahltyp. In C++ muss die main()-Funktion einen
Wert vom Typ int zurückgeben. Der Rückgabewert der main()-Funktion
gibt meist Auskunft darüber, ob das Programm erfolgreich beendet werden
konnte oder ob ein Fehler während der Ausführung aufgetreten ist. Der
Wert wird dabei direkt an das Betriebssystem bzw. an das aufrufende Programm zurückgegeben.
43
jetzt lerne ich
1
3 Das erste Programm
Im Normalfall müssen Sie das Schlüsselwort return verwenden, um
Werte aus Funktionen zurückzugeben. Die main()-Funktion bildet eine
Ausnahme. Wenn Sie hier keinen Rückgabewert angeben, wird der Wert
0 automatisch zurückgegeben. Näheres zu Rückgabewerten erfahren Sie
im Kapitel Funktionen.
Das Schlüsselwort void in runden Klammern nach main bedeutet, dass das
Programm Hello World (genauer die Funktion main()) keine Argumente berücksichtigt, die eventuell durch das Betriebssystem oder ein anderes aufrufendes Programm übergeben werden. Dieses Schlüsselwort heißt so viel
wie »leer« und wird Ihnen noch häufiger bei der Programmierung in C++
begegnen.
1
Sie haben sicher schon einmal ein Programm mit Kommandozeilenargumenten gestartet, also einem Programm beim Aufruf Argumente mitgegeben, um die Wirkungsweise des Programms zu beeinflussen. Ein
Beispiel ist format a:. Dieser Aufruf sorgt dafür, dass eine Diskette formatiert wird. format ist hier der Name des Programms und a: das Argument, das in diesem Fall festlegt, dass das Laufwerk a: formatiert werden soll.
Im Beispielprogramm Hello World besteht die main()-Funktion nur aus einer Anweisung in der siebten Zeile.
7: cout << "Hello World\n";
Die Anweisung cout << "Hello World\n"; gibt die Zeichenkette Hello
World auf den Bildschirm aus. Der Backslash \ (§+ß), gefolgt von dem
kleinen n (\n) ist ein C++-Steuerzeichen und bewirkt einen Zeilenumbruch.
Zeichenketten werden auch Strings genannt und müssen in C++ in doppelte Anführungszeichen (Á+2) eingeschlossen werden. cout steht für
character out und sorgt für die Ausgabe auf den Bildschirm.
Der Ausgabeoperator (<<) gibt an, dass die Zeichenfolge Hello World an
cout geleitet und somit auf den Bildschirm ausgegeben werden soll. Der
Einfügeoperator besteht aus zwei sich öffnenden spitzen Klammern. Das
letzte Zeichen in der siebten Zeile ist ein Semikolon (;). Sie müssen alle Anweisungen in C++ mit einem Semikolon abschließen.
Die geschweifte Klammer in Zeile 8 schließt die main()-Funktion und damit
das Programm ab.
44
Hello World
cout ist ein Objekt. Objekte spielen in C++ eine zentrale Rolle. Was es
mit Objekten genau auf sich hat, werden Sie im Kapitel über objektorientierte Programmierung erfahren. Momentan müssen Sie nur wissen,
dass man cout für die Ausgabe verwenden kann.
jetzt lerne ich
1
Formatierung des Quelltextes
Mit Formatierung wird das Erscheinungsbild des Quelltextes bezeichnet. Die
Formatierung geschieht dabei durch Whitespace-Zeichen. Bei WhitespaceZeichen handelt es sich um alle Zeichen, die keine sichtbare Darstellung
besitzen. Dazu gehören im Wesentlichen Leerzeichen (þLeertasteÿ), der Tabulator (Å) und Zeilenumbrüche (Æ).
In C++ ist es nicht notwendig, jede Anweisung in eine eigene Zeile zu
schreiben oder durch Leerzeichen zu trennen. Man könnte das Programm
Hello World auch folgendermaßen schreiben:
Listing 3.3:
Hello World
mit unüberSie könnten das Programm auch auf zwei Zeilen kürzen, indem Sie die Zei- sichtlicher Forlen 2 und 3 zu einer zusammenfassen. Der C++-Compiler übersetzt auch matierung
solche Programme anstandslos. Die Form ist für den Compiler bedeutungslos, nur die korrekte Syntax ist wichtig. Eine korrekte Syntax sagt aber noch
nichts darüber aus, ob das Programm auch tatsächlich wie gewünscht funktioniert.
1: #include <iostream>
2: using namespace std; int main(void){
3: cout << "Hello World\n";}
Syntax und Semantik
Die Begriffe Syntax und Semantik stammen aus dem Bereich der Informatik
und betreffen den Aufbau bzw. die inhaltliche Bedeutung eines Programms.
Wenn ein Programm übersetzt werden kann, ohne dass der Compiler Fehler
meldet, ist das Programm bezüglich seiner Syntax korrekt. Das heißt, dass
das Programm richtig aufgebaut ist und keine Eingabefehler enthält. In einer natürlichen Sprache entspräche dies einem Text mit korrekter Rechtschreibung und korrektem Satzbau.
Unter der Semantik eines Programms kann man sich dessen inhaltliche Bedeutung vorstellen. Die Bedeutung kann z.B. eine Funktion sein, die das
Programm berechnet. Damit ein Programm die beabsichtigten Ergebnisse
erzielt, müssen sowohl Syntax als auch Semantik korrekt sein. Ein Programm kann also eine korrekte Syntax aufweisen, aber trotzdem nicht das
beabsichtigte Ergebnis liefern. Stellen Sie sich beispielsweise ein Programm vor, das entwickelt wurde, um die Fläche eines Kreises zu berechnen. Angenommen, der Programmierer hat keine syntaktischen Fehler be-
45
3 Das erste Programm
jetzt lerne ich
gangen, aber die Formel zur Berechnung der Kreisfläche mit der für den
Kreisumfang verwechselt. Der Compiler übersetzt dann das Programm ohne
Fehlermeldung, da es bezüglich der Syntax korrekt ist. Da das Programm
aber mit einer falschen Formel arbeitet, führt dies zu einem unerwünschten
Ergebnis.
1
Eine Schreibweise wie in Listing 3.3 ist nur schwer zu verstehen. Sie
sollten daher Ihre Programme so formatieren, dass sie gut lesbar sind.
Dabei empfiehlt es sich vor allem, Leerzeilen zu verwenden, im Allgemeinen nicht mehrere Anweisungen in eine Zeile zu schreiben und mit
Einrückungen zu arbeiten.
Kommentare
Kommentare sind ein weiteres wichtiges Mittel, um den Quellcode besser
lesbar und verständlicher zu gestalten. Mit Kommentaren lassen sich Erklärungen und Hinweise im Quelltext anbringen. In der Praxis versteht man einen Quellcode, auch wenn man ihn selbst geschrieben hat, nach einiger
Zeit nicht mehr sofort. Kommentare helfen dann, die Bedeutung des Quelltextes schneller zu erfassen. Nahezu unverzichtbar sind Kommentare, wenn
mehrere Programmierer an einem Projekt arbeiten, da es erfahrungsgemäß
recht schwer ist, sich in die Denkweise anderer Programmierer zu versetzen. Hier sollten die Kommentare das Wesentliche erklären, so dass die
Funktionsweise der Quellcodestellen schnell nachvollzogen werden kann.
In C++ gibt es zwei Arten von Kommentaren. Der Unterschied ist, dass die
eine Variante sich jeweils nur auf eine Zeile bezieht und die andere Variante das Anbringen von mehrzeiligen Kommentaren erlaubt.
Kommentare, die nur bis zum Ende der Zeile gültig sein sollen, werden mit
zwei Schrägstrichen // (Á+7) eingeleitet. Mehrzeilige Kommentare beginnt man dagegen mit /* und man beendet sie mit */. Listing 3.4 zeigt das
Programm Hello World, diesmal mit Kommentaren versehen.
Listing 3.4:
Hello World
mit Kommentaren versehen
46
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
/*
Programmname : Hello World
Gibt den String Hello World auf den
Bildschirm aus und wartet auf Enter
*/
#include <iostream>
using namespace std;
Hello World
12:
13:
14:
15:
16:
17:
jetzt lerne ich
// Hier beginnt das Hauptprogramm
int main(void)
{
cout << "Hello World\n"; /* HelloWorld ausgeben */
}
Die erste Zeile enthält die Zeichenfolge /*, die einen Kommentar einleitet,
der sich über mehrere Zeilen erstrecken kann. Danach folgt ab der zweiten
Zeile eine Beschreibung des Programms. In der sechsten Zeile endet der
Kommentar mit */. In Zeile 12 steht ein Kommentar, der mit // eingeleitet
wird und auch nur in dieser Zeile gültig ist. Zeile 16 zeigt, dass man die
Syntax für einen Mehrzeilenkommentar auch in nur einer Zeile verwenden
kann.
Wie Sie sehen, ist es möglich, Kommentare für längere Beschreibungen zu
nutzen (siehe Zeile 1 bis 6 in Listing 3.4). Bei der Verwendung von Kommentaren können Sie diese sowohl in separate Zeilen schreiben (wie in
Zeile 12 demonstriert) als auch hinter Anweisungen in der gleichen Zeile
(Zeile 16).
Kommentare werden bei der Kompilierung ignoriert und haben daher keine
Auswirkung auf Speicherbedarf und Geschwindigkeit des resultierenden,
ausführbaren Programms. Sie können die Kommentare einfach in Ihr bereits
bestehendes Programm einfügen. Wenn Sie das Programm verändert haben, sollten Sie die Datei speichern. Dies geschieht am einfachsten über das
Diskettensymbol in der Standardsymbolleiste von Code::Blocks.
Nach dem Speichern der Datei sollten Sie nicht vergessen, das Projekt zu
speichern. Wenn Sie ein neues Projekt anlegen, wie Sie es für Hello World
getan haben, enthält es zu Beginn keine Dateien. Durch das Hinzufügen der
cpp-Datei Hello World.cpp wurde das Projekt geändert. Aus diesem Grund
fragt Code::Blocks beim Beenden, ob Sie das Projekt speichern wollen. Beantworten Sie diese Frage mit JA. Danach können Sie das Projekt Hello
World jederzeit wieder laden, indem Sie die Datei Hello World.cbp öffnen.
Alternativ können Sie das Projekt auch direkt speichern, indem Sie aus dem
PROJECT-Menü den Eintrag SAVE PROJECT wählen.
Neben Projekten kann Code::Blocks außerdem Workspaces verwalten. In
einem Workspace lassen sich mehrere Projekte zusammenfassen. Dies
ist komfortabel, wenn Sie gleichzeitig an mehreren Projekten arbeiten
und schnell zwischen den Projekten wechseln wollen. Workspaces können, wie Projekte auch, über das FILE-Menü geladen und gespeichert
werden.
1
47
3 Das erste Programm
jetzt lerne ich
Fehler während der Kompilierung
Zum Abschluss soll noch ein Blick darauf geworfen werden, was geschieht,
wenn ein Programm einen syntaktischen Fehler aufweist. Sehen Sie sich
Listing 3.5 an.
Listing 3.5:
Quelltext mit
einem Tippfehler in
Zeile 16
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
/*
Programmname : Fehler
Dieses Programm enthält einen
Fehler in Zeile 16
*/
#include <iostream>
using namespace std;
// Hier beginnt das Hauptprogramm
int main(void)
{
cout << "Fehler\n" /* HelloWorld ausgeben */
}
In der 16. Zeile fehlt das Semikolon, das die cout-Anweisung abschließt.
Wenn Sie dieses Programm kompilieren, tritt ein Fehler auf.
Abb. 3.14:
Fehlermeldung beim
Kompilieren
Abbildung 3.14 zeigt den Ausgabebereich von Code::Blocks. Hier meldet der
Compiler korrekterweise, dass ein Semikolon fehlt.
Wenn Sie auf die Fehlermeldung doppelklicken, steuert Code::Blocks die
fehlerhafte Zeile automatisch an. Sie sehen, dass der Kommentar bei der
Kompilierung nicht berücksichtigt wird, da der Compiler den Fehler vor der
schließenden geschweiften Klammer und nicht schon vor dem Kommentar
meldet.
Dass der Compiler den Fehler in Zeile 17 meldet und nicht die eigentlich
fehlerhafte Zeile 16 moniert, liegt daran, dass Fehler erst als solche erkannt
werden, wenn ein falsches oder unerwartetes Zeichen auftaucht. Das Semikolon könnte durchaus noch in der nächsten Zeile, also der 17. Zeile, fol-
48
Zusammenfassung
jetzt lerne ich
gen. Da aber hier eine geschweifte Klammer steht und damit die main()Funktion beendet wird, ohne dass die aktuelle Anweisung mit einem Semikolon abgeschlossen wird, meldet der Compiler jetzt einen Fehler.
Es kann mitunter schon vorkommen, dass der Compiler sehr viele Fehlermeldungen erzeugt, obwohl Sie sich nur einmal vertippt oder nur ein
Zeichen vergessen haben. Das liegt daran, dass ein Fehler sehr viele Folgefehler erzeugen kann. Fehlende Klammern sind ein häufiger Grund für
solche Fehler.
3.4
1
Zusammenfassung
In diesem Kapitel haben Sie gelernt, wie Sie ein Projekt in Code::Blocks anlegen, wie Sie Dateien zu dem Projekt hinzufügen, Code in das Quelltextfenster eingeben, den Quelltext übersetzen und gegebenenfalls Fehler korrigieren.
Sie haben erfahren, dass jedes C++-Programm über eine main()-Funktion
verfügt und dass man mithilfe von cout Zeichenketten auf den Bildschirm
ausgeben kann.
Sie haben gelernt, dass C++ case-sensitive ist und dass der Präprozessor
den Quellcode noch vor der Übersetzung durch den Compiler verändert.
Kommentare und eine entsprechende Formatierung machen Quellcodes
besser lesbar und so leichter verständlich. Sie sollten Kommentare deshalb
gezielt zur Erläuterung Ihrer Programme einsetzen.
3.5
Fragen
1. Was bewirkt die Anweisung #include <iostream>?
2. Was bedeutet der Begriff case-sensitive?
3. Wozu werden Kommentare eingesetzt?
4. Was ist unter den Begriffen Syntax und Semantik zu verstehen?
Die Antworten finden Sie in Anhang A.
49
Herunterladen