Wie arbeitet der Compiler |
C Compiler arbeiten im Prinzip in drei Schritten, welche in der Regel durch 3 Teilprogramme ausgeführt werden. Dem Precompiler, dem Compiler und dem Linker. Im folgenden wird nur kurz angeschnitten, was in den einzelnen Schritten gemacht wird.
Der Precompiler ist ein Programm welches im Grunde genommen den Sourcecode durchgeht und speziell für ihn bestimmte Befehle ausführt. Diese Befehle beginnen in der Regel mit # In einem späteren Kapitel werden wir noch genauer auf einige Befehle eingehen.Erkennt der Precompiler zum Bespiel #include <xy.h> so ersetzt er an dieser Stelle den Code von #include <xy.h> durch den Text des Files xy.h . So wächst der Sourcecode entsprechend, bis am Ende ein Quelltext steht, der an den Compiler übergeben wird.
Der Compiler übersetzt nun den Quelltext in ein sogenanntes Objektformat. Diese Files haben in der Regel die Endung .o oder .obj . Der Linker kann nun ein oder mehrere dieser Objektdateien zusammenfügen und ein startbares Programm generieren. Systemabhängig wird dann ein Startcode an den Anfang gehängt, der bei dem Ausführen des Programmes als erstes aufgerufen wird und der dann auf das Hauptprogramm verzweigt.
Diese hinzugelinkten Objektdateien können nun Beispielsweise Unterprogramme
beinhalten. In der Beispielgrafik werden z.B. die Objektdateien des Hauptprogramms
haupt.o
mit den Objektdateien der Module, die vom Hauptprogramm benötigt werden,
help.o
und show.o , zu einem ablauffähigen Programm gelinkt.
Die erzeugten Programme haben unter Dos z.B. die Endung
.com oder
.exe
. In der Regel werden diese Schritte automatisch bei modernen Compilersystemen
ausgeführt und der Programmierer bekommt nicht mehr viel davon zu
sehen.
Und los geht's mit unserem ersten C-Programm! |
Zurück zu unserem Beispielprogramm, mit dem wir den Compiler getestet
haben. Wenn wir es mit einem Texteditor ansehen, z.B. mit edit test.c
so sieht es wie folgt aus:
/* Dies ist unser erstes C-Programm im C-Kurs */
#include <stdio.h> void main( void )
|
Zu Anfang gleich eine Warnung: C unterscheidet zwischen Groß-
und Kleinschreibung! Schlüsselwörter, d.h. Standardbefehle in
C sind klein geschrieben
Die Grundstruktur |
An unserem ersten Programm können wir schon alle Merkmale eines
C-Programms sehen. Kommentare sind von einem /* am Anfang und einem */
am Ende umklammert. Der Compiler überliest so alles was sich innerhalb
dieses Kommentars befindet:
/* Dies ist ein Kommentar */ |
Der Befehl #include weißt an, das eine Programmsammlung in das Programm eingebunden werden soll. C ist eine Programmiersprache, die in ihren Grundzügen nur aus wenigen Befehlen aufgebaut ist. Das ist eine ihrer großen Stärken, da man sich später eigene Befehle programmieren kann. Das heißt aber auch: Selbst Grundfunktionen wie Bildschirmausgabe oder die Tastatureingabe sind kleine Unterprogramme, die explizit eingebunden werden müssen, da sonst der Compiler nicht weiß, was er zu tun hat. Fazit: C ist modular aufgebaut. Und zwar von Grund auf! Mit dem #include werden wir uns in einem späteren Kapitel noch ausführlicher zuwenden.
Nun kommen wir zu dem wichtigsten Modul , welches auf keinen Fall Fehlen
darf, dem main-Modul. Es sagt dem Compiler, das dieses Modul
unser Programm darstellt. Wenn es fehlen würde, wüßte der
Compiler gar nicht, welches das Hauptprogramm ist und würde von daher
nur Programmodule erzeugen, ohne uns auch mit nur einem funktionierenden
Programm zu beglücken. Alle anderen Module, die wir später schreiben
können nur ausgeführt werden, wenn sie direkt oder indirekt vom
Hauptprogramm aus aufgerufen werden! Jedes Modul besteht aus einem Modulnamen
und einem Körper. Der Modulkörper wird durch zwei geschweifte
Klammern dargestellt. Alles, was sich in diesen Klammern befindet, gehört
zum Modul.
Modulname ( )
{ /* Dies ist der Inhalt des Moduls */ } |
Zugegeben, dieses Modul ist recht nutzlos, da es nur eine Kommentarzeile
enthält. Es ist aber recht anschaulich.Wie oben bereits beschrieben
wurde: Ein Modulname zeichnet sich durch alle anderen aus: main ( )
! Die Doppelklammer hinter dem Modulnamen ist zwingend, da dort Übergabeparameter
stehen können. Davon werden wir später noch Gebrauch machen wenn
wir uns näher mit den Modulen befassen
printf |
Zurück zu unserem Programm: Den einzigen Befehl, den wir hier benutzen,
ist der printf () Befehl. Wie schon erwähnt, handelt es sich
hierbei selber um ein Modul, dem übergeben wird, was auf dem Bildschirm
ausgegeben werden soll.
printf ("Super C-Kurs\n"); |
Es soll also der Text Super C-Kurs auf dem Bildschirm ausgegeben
werde. Jede Befehlszeile muß mit einem Semikolon abgeschlossen werden,
damit der Compiler weiß, wann Befehlsende ist. Jetzt kommt natürlich
der berechtigte Einwand: Was soll das \n dort ? Bestimmte Zeichen
wie \ oder auch % sind reservierte Zeichen, die dem Compiler
sagen, das hier bestimmte Aktionen durchgeführt werden. \n sagt:
An dieser Stelle wird ein Zeilenvorschub eingefügt. Ansonsten würde
einfach nach dem Text keine neue Zeile angefangen werde.
printf ("Super "); |
printf ("C-Kurs\n"); |
Ist also das gleiche, was wir mit unserer einen Zeile oben bewirkt haben.
printf - Sonderzeichen |
Wie wir bereits sahen, gibt es Sonderzeichen, die mit \ beginnen. Damit
stellt man Zeichen, die sonst nur schwer dargestellt werden könnten.
Im folgenden werden diese Sonderzeichen aufgelistet.
|
Übungsaufgaben |
1) Folgende Zeichenfolge soll mit Anführungszeichen ausgegeben
werden. "C macht Spaß"
2) Selbiges soll mit ausgegeben werden ohne Anführungszeichen,
dafür aber mit einem Zeilenvorschub zwischen jedem Wort.
3) Einfach mit den Sonderzeichen, die mit \ beginnen experimentieren.
Viel Spaß. Nächstes mal werden wir uns mit Variablen und
dem einlesen von der Tastatur beschäftigen.
[Inhalt][0][1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17]