DOS Programmierung Tutorial – Compiler aufwärmen
Die Vorbereitung ist abgeschlossen. In diesem Teil der DOS Programmierung Tutorial Artikelreihe zeige ich dir wir du deinen Compiler mit einem einfachen Programm auf touren bringst und die Prozesse vom Abtippen des Source Codes über das Compilieren, Fehler ausbessern zum ausführbaren Programm kommst.
DOS Programmierung Tutorial – Compiler aufwärmen
Das erste Programm sollten wir noch in der nativen Umgebung, also in DOS und in der gerade installierten Entwicklungsumgebung Borland C++3.0 machen. Dazu starten wir den Editor, standardmäßig findest sich dieser nach der Installation in folgendem Verzeichnis:
C:\TC\BIN\TC.EXE
Was genau die Entwickler dazu gebracht hat dem Codefenster einen blauen Hintergrund zu verpassen mag unbeantwortet bleiben, der Editor erinnert schon sehr an den bekannten edit von Dos. Offenbar gibt es aber im Interface viele zusätzliche Optionen. Ich erspare mir an dieser Stelle nähere Details zu dessen Verwendung. Man findet im Internet genug Infos dazu. Die Schritte zum ersten lauffähigen Programm sind viel interessanter. Vor der ersten Verwendung habe ich mir noch die Pfade unter Options->Directories… eingestellt:
Die erstellten Dateien sollen nach C:\SOURCE\BIN und der Quellcode wird unter C:\SOURCE abgelegt. Die beiden Verzeichnisse Include und Lib waren bereits vorausgefüllt.
Hello Irgendwas
Das erste Programm einer neuen Programmiersprache dient immer zum ersten Abtasten wie man eine Ausgabe erzeugt. Das fertige Ergebnis des ersten in Turbo C++ geschriebenen Programms mit der Ausgabe im DOS Fenster (das kann man über Window->Output) anzeigen lassen.
Ein paar Worte was da genau passiert. Seit jeher benötigt man für ein Programm einen Einsprungspunkt, da von irgendwo der Programmfluss gestartet werden muss. Zum Vergleich: in den zuvor üblichen Sprachen wie BASIC oder ASSEMBLER (siehe dazu mein Amiga Assembler Tutorial) ist sowas nicht nötig. Die beginnen einfach mit der ersten Zeile Code. Der relevante Code in diesem kleinen Beispiel ist die Zeile mit dem printf. Da wird einfach der unter Hochkomma definierte Code ausgegeben. Doch wohin? printf ist eine Funktion von stdio.h (Standard Input Output). Die Standardausgabe ist bei DOS die Konsole, lässt man das Programm mit RUN ausführen sieht man das Ergebnis im Ausgabefenster (Output).
Nähere Details zu den Funktionen der mitgelieferten Header Dateien findet man in der Hilfe. Dort gibt es auch eine Auflistung aller Schlüsselworte von C++, alle möglichen Konstanten und Hilfe zu allen Funktionen.
Verzeichnisse näher analysiert
An dieser Stelle weise ich nochmals auf mein Setup hin. Die Quelldateien werden im Source Ordner abgelegt. Fürs erste werden das einzelne Dateien für die einzelne Beispiele sein, was ist völlig ok so. Für ein größeres Projekt wird man *.h und *.cpp Dateien schreiben und da mit unter auch relativ viele. Für so einen Fall kann man in der IDE ein Projekt erstellen. Sollte es dazu kommen empfiehlt es sich einen eigenen Unterordner pro Projekt unter Source zu erstellen.
Die erstellten Ausführbaren *.exe Dateien findet man unter Source/Bin. Das kleine Hello World Programm ist satte 8722 Bytes groß. Das kommt daher, dass mit dem Header stdio.h noch viel mehr Code eingebunden wird als unsere paar Zeilen. Das *.obj ist ein Ergebnis vom Compiler, der Linker macht daraus dann die *.exe. Diese *.exe Datei ist nun jederzeit auch unter DOS ausführbar.
Retro Compiler
Mir ist es im ersten Moment gar nicht leicht gefallen den Compiler einzuordnen. Laut Programmversion stammt die IDE aus dem Jahr 1992. Das bedeutet wir sind noch viele Jahre vom ersten C++ Standard (C++98) entfernt. Es handelt sich schon um einen C++ Compiler, der ist also bereits in der Lage über C hinaus auch objektorientiert zu compilieren. Ohne Standard und ohne historisches Wissen habe ich im ersten Moment gar keine Information darüber, was der C++ Compiler schon alles kann. Ein kleines Beispiel mit einer etwas komplexeren Klasse zeigt jedoch erfreuliches Bild.
Das Beispiel findet man zum Ausprobieren auch auf GitHub, den Code kann man verstehen, hat aber nichts mit dieser Tutorialserie zu tun. In den weiteren Beispielen konzentriere ich mich mehr auf sequentielle Programmierung (also keine Objektorientierung) so wie es damals auch üblicher war. Als kleine Notiz am Rande sei noch erwähnt, dass ich mit statischen Klassenvariablen Probleme hatte, da hat der Linker nicht verstanden, was ich von ihm will. Man erkennt schon, dass nicht alle bekannten Funktionen schon 1992 möglich waren. Zumindest nicht mit dieser Entwicklungsumgebung.
Fazit
Wir haben das erste Programm unter DOS geschrieben. Mit der Turbo C++ und dem C Compiler ist das gar nicht so schwer. Wir können nun weiter experimentieren und lustige Ausgaben unter DOS erstellen, doch bevor wir noch tiefer gehen zeige ich im nächsten Artikel wir man die Arbeit dank dem modernen Betriebssystem optimiert.