[Inhalt][0][1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17]

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.

Prinzip: Compiliervorgang

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.

Prinzip: Precompiler

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.

Prinzip: Linker

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
{

    printf ("C-Kurs\n");
}

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.
 
 

\n Zeilenvorschub , entspricht RETURN bei der Tastatureingabe
\t Tabulator , auf dem Bildschirm wird ein Tabulator [TAB] - Sprung gemacht
\b Backspace , letztes Zeichen wird gelöscht
\r Carriage Return , unter UNIX irrelevant. Unter DOS besteht ein Zeilenende aus \n\r
\f Irrelevant für Bildschirm und Tastatur, bewirkt unter einer Druckerausgabe einen Seitenvorschub (formfeed)
\0 NULL , wird intern für eine String-Endmarkierung verwendet. Wird manchmal auch bei Druckersequenzen benutzt.
\\ Backlash , erzeugt ein \ auf dem Bildschirm
\' Erzeugt ein Hochkomma auf dem Bildschirm
\" Erzeugt Anführungszeichen, die ja sonst schwerlich darstellbar sind

 
 
Ü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]