Inhaltsverzeichnis

minikurs(1): Die Programmierumgebung

It's just me and the code, and for awhile, I feel like a real programmer again.
— Charles Petzold 1)

Werkzeuge und Vorarbeiten

Echte Programmierer schreiben

COPY CON: PROGRAM.EXE
MZ ...
^Z

Nein, im Ernst. Programmierer sind Handwerker. Wir umgeben uns mit einigen Werkzeugen:

Teste, ob diese Umgebung arbeitsfähig ist. Bist Du mit den Werkzeugen vertraut, kann das Programmieren beginnen. Für Neulinge kommen jetzt die ersten Hürden. Wer wirklich programmieren lernen will, muss diese überwinden.

Konsole

Die Betriebssystemkonsole hat je nach Betriebssystem unterschiedliche Namen:

Meist ist dieses häßliche schwarze Fenster unter grafischen Oberflächen irgendwo versteckt:

Wir benutzen einige wenige Befehle, um uns im Dateisystem des Computers zurechtzufinden, Verzeichnisse (Ordner) anzulegen und mit Dateien umzugehen. Diese Aktionen lassen sich auch auf grafischen Oberflächen bewerkstelligen. Mit der Tastatur und etwas Fingerfertigkeit ist man aber häufig schneller als mit Maus und Zeigefinger:

Unix Windows
zu Laufwerk X wechseln X:
Verzeichnis wechseln cd name cd name
Verzeichnis anzeigen ls dir
Verzeichnis anlegen mkdir name md name
Datei anzeigen more name more name
Datei kopieren cp quelle ziel copy quelle ziel
Datei umbenennen mv alt neu move alt neu
Datei löschen rm name del name

Erstelle zum Üben ein Verzeichnis, in dem später die Quelltexte abgelegt werden. Mache Dich mit den Befehlen vertraut.

Editor

Der Editor ist das "Arbeitszimmer" des Programmierers. Hier werden die meisten Arbeiten erledigt. Über die beste Art, diesen Arbeitsplatz einzurichten, lässt sich endlos streiten.

Unter Unix kommen zwei Editoren in die engere Wahl,

Beide Editoren sind sehr gewöhnungsbedürftig. Einige wichtige Befehle für den vi sind hier beschrieben. Obwohl auch kedit für den Anfang genügt, sollte man wenigstens einen von beiden oben genannten Editoren kennen. Also

vi dateiname

Unter der Windows-Konsole lassen sich Dateien mit

bearbeiten. Edit wandelt Tabulatoren beim Abspeichern in Leerzeichen um. Das kann fatal sein. Am Notepad stört das Beharren auf der Dateiendung *.txt und die fehlende Zeilennummernanzeige (ab Windows XP im Menü Ansicht aktivierbar).

Ein paar Zusatzprogramme können unter Windows das Leben erleichtern. Der zweifenstrige Dateimanager FreeCommander kann

Der bevorzugte Editor ist einstellbar, etwa Notepad++ oder Programmer's File Editor (Freeware).

Entscheide Dich, welchen Editor Du nutzen willst. Mache Dich mit ihm vertraut. Wie wird Text geschrieben, verändert, gelöscht, auf der Festplatte gespeichert und wieder von dieser geladen?

Compiler

Viele Linux-Systeme haben den GNU C++-Compiler vorinstalliert. Bei Distributionen für Heimanwender, z.B. SuSE Personal Edition, ist der Compiler nicht vorhanden. In diesem Fall müssen Entwicklungspakete nachträglich installiert werden. Wenn unter Linux der Befehl

g++

mit

g++: no input files

antwortet, ist der GNU-Compiler betriebsbereit. Der Befehl

make

auf der Linux-Konsole in einem leeren Verzeichnis bringt die Meldung

make: No targets specified and no makefile found.  Stop.

(oder Sinngemäßes auf Deutsch) hervor. Linux-Nutzer können gleich zum ersten C++-Programm übergehen.

Windows bringt keinen Compiler mit. Den muss man selber installieren. Kostenfreie C++-Entwicklungssysteme sind im Internet verfügbar. Diese Systeme bringen eine Entwicklungsumgebung (Projektverwaltung, Editor, Debugger, Hilfesystem) mit. Ignoriere (zumindest fürs Erste) die mitgelieferte Umgebung! Die Compiler dieser Systeme können auch auf der Konsole genutzt werden. Dazu ist eine Datei make.bat hilfreich, besonders, wenn die Rechte des Nutzers soweit eingeschränkt sind, dass keine Umgebungsvariablen und Pfade änderbar sind. Der Windows-Konsolenbefehl

make

sollte dann eine Meldung ähnlich dieser bringen (Beispiel für Dev C++ / GNU make):

make.exe: *** No targets specified and no makefile found.  Stop.

Es kann nun, fast wie unter Linux, mit dem ersten C++-Programm weitergehen.

Test der Umgebung

Um von Beginn an Ordnung zu halten, sollte ein Verzeichnis für Programme (Quelltexte) angelegt werden. Wechsle mit dem Konsolenbefehl cd in dieses Verzeichnis. Dort entsteht ein erster Quelltext hallo.cpp:

hallo.cpp
//: hallo.cpp : Compilertest - R.Richter 2006-12-27
///////////////////////////////////////////////////
 
#include <iostream>
 
int main()
{
  std::cout << "Hallo, Welt!\n";
  return 0;
}
                                                //~

Abspeichern. Editor verlassen. Das ausführbare Programm entsteht aus diesem Quelltext durch den Aufruf

make hallo

(make hallo.exe für Windowsbenutzer mit Microsoft-Compiler). Überprüfe, welche Dateien jetzt im aktuellen Pfad liegen.

Das Programm startet mit dem Befehl

hallo

(oder ./hallo unter Unix, wenn der aktuelle Pfad . nicht in der Variable $PATH eingetragen ist).

Gratulation! Soeben hat das erste Programm erfolgreich eine Meldung auf die Konsole ausgegeben:

Hallo, Welt!

Die Freude hält nicht lange an. Jetzt kommt der Ehrgeiz. Der Quelltext kann erneut mit dem Editor bearbeitet, gespeichert, übersetzt und ausgeführt werden (Edit-Compile-Run-Zyklus). Ein Programm ist nie fertig. Man hört nur auf zu programmieren…

Hat etwas nicht funktioniert?

Dann ist einer der vorangegangenen Schritte (Quelltext schreiben, speichern, übersetzen) schiefgegangen. Nicht aufgeben! Versuche die Fehler zu finden und zu korrigieren. Es ist jetzt günstig, mit zwei Konsolenfenstern in demselben Verzeichnis (!) zu arbeiten. In einem wird der Quelltext mit dem Editor bearbeitet und dann gespeichert (!). Im anderen Fenster wird der Befehl zum Übersetzen ausgeführt.

Achte auf die Ausschriften (Fehlermeldungen), die nach Deinen Kommandos auf der Konsole erscheinen. Lies! Versuche die Meldungen zu entziffern. Es gibt keinen anderen Weg, die Ursache des Fehlers einzugrenzen und die Ursache zu beseitigen. (Von Raten und Probieren abgesehen.)

Hat alles reibungslos funktioniert?

Dann gehe nicht sofort weiter. Öffne den Quelltext nochmals, baue absichtlich Fehler in den Quelltext ein. Füge Zeichen ein, lasse Zeichen weg, ersetze einzelne Zeichen durch andere. Speichere den Quelltext, lass ihn übersetzen. Welche Fehlermeldungen liefert der Compiler? Mache Dich damit vertraut. Wenn Dir dieser Fehler wieder einmal begegnet, kannst Du Dich erinnern: Moment mal, den Fehler kenne ich … Erfahrungsgemäß begeht man immer wieder dieselben Fehler, obwohl man eigentlich etwas daraus lernen sollte.

Fehlermeldungen

hallo.cpp:1: error: expected `,' or `;' before '.' token

Welches Programm meldet den Fehler?

Fehlermeldungen des Compilers liefern neben dem Wort error meist noch den Namen des Quelltextes nebst der Zeile, in der der Fehler bemerkt wurde und eine Beschreibung, was der Compiler für falsch hält.

Sei beim Lesen der Fehlermeldungen aufmerksam. Die Zeile, in welcher der Compiler einen Fehler feststellt, ist manchmal gar nicht falsch. Der Fehler wurde nur erst dort bemerkt. Seine Ursache liegt vielleicht in der Zeile davor (Semikolon am Zeilenende vergessen?) oder noch weiter oben.

Auf Anfänger wirken schon einzelne Tippfehler einschüchternd, die beim Übersetzen gleich den ganzen Bildschirm mit Fehlermeldungen zumüllen. Das ist, als ob ein Auto auf kurvenreicher Strecke im Gebirge ausbricht:

Warnung: Glatteis!
Fehler: Geschwindigkeit zu hoch
Fehler: Antiblockiersystem aktiv
Fehler: rechter Blinker ausgefallen
Fehler: rechter Scheinwerfer defekt
Fehler: Bodenkontakt rechtes Vorderrad verloren
Fehler: Bodenkontakt rechtes Hinterrad verloren
Fehler: Maximalgeschwindigkeit überschritten
Aufprall ...

Keine Panik. Wichtig ist im Moment nur die allererste Fehlermeldung, die weiteren können Folgefehler des ersten sein.

Was, wenn soviele Meldungen über den Bildschirm rasselten, dass die erste Meldung nicht gelesen werden konnte? Dann übersetze noch einmal und lenke die Fehlerausschriften in eine Textdatei um.

make hallo 2> log.txt
more log.txt

Lies den Anfang der Logdatei. Wird z.B. in der Zeile mit dem Gruß "Hallo, Welt\n" statt des Doppelpfeils << nur < geschrieben, dann kann sich der Compiler nicht mehr bremsen, viele gut gemeinte Ratschläge zu erteilen…

Manche Fehlermeldungen sind schwer zu deuten. In einigen Fällen sind die Empfehlungen des Compilers schlicht irreführend. Nicht vergessen: Das ist und bleibt eine Maschine. Sie kann nicht für uns denken. Sie teilt uns mit der Fehlermeldung nur mit, dass unsere Eingaben nicht den geforderten Rechtschreibregeln entsprechen. Die Fehlerursache finden und beseitigen müssen wir selbst.

Weiter: Teil 2.