| #include <pronix.de> |
|
|
Ziel von Kapitel 3 ist es, sich einen ersten Überblick über dem Aufbau eines Programms zu verschaffen. Außerdem soll das Programm ausführbar gemacht, also übersetzt werden. Voraussetzung für dieses Kapitel ist, dass bereits ein Compiler installiert wurde.
3.1. Der beste Lernerfolg
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Tipp |
|
Wird das Programm in einer Entwicklungsumgebung unter Windows übersetzt, sollten Sie vor der Zeile return 0; immer die Funktion getchar(); schreiben, damit das Programm kurz anhält und sich nicht gleich wieder beendet. Damit wartet das Programm, bis die ENTER-Taste betätigt wurde, bevor es sich beendet. |
|
|
Hinweis |
|
Anleitungen, wie Sie ein Listing mit einem bestimmten Compiler übersetzen können, habe ich Ihnen unter der Webadresse http://www.pronix.de/ bereitgestellt. |
|
Als Ergebnis findet sich im Verzeichnis ein ausführbares Programm namens "hallo" bzw. "hallo.exe" (sollten Sie das Programm "hallo.c" genannt haben). Diese Datei kann jetzt wie jede andere ausführbare Datei in der Kommandozeile gestartet werden.
Bei Entwicklungsumgebungen dürfte meistens ein Klick auf "Ausführen" bzw. "Run" reichen. Wenn die Textfolge "Hallo Welt" auf dem Bildschirm ausgegeben wird, ist es geschafft. Sie haben das erste Programm geschrieben und erfolgreich übersetzt!

Abbildung 3.1: "Hallo Welt" in einem Konsolenfenster unter MS-DOS

Abbildung 3.2: Programm "Hallo Welt" in einer Konsole unter Linux
|
Hinweis |
|
Sollten Sie das Programm unter Linux nicht mit dem Programmnamen starten können, schreiben Sie einfach ein ./ vor den Programmaufruf. Beispielsweise: ./programmname |
|
Jetzt soll das erste Programm in seine einzelnen Bestandteile zerlegt und Schritt für Schritt durchgegangen werden.
#include <stdio.h>
include ist kein direkter Bestandteil der Sprache C, sondern ein Befehl des Präprozessors. Der Präprozessor ist ein Teil des Compilers, der nicht das Programm übersetzt, sondern kontrollierend nicht bleibende Änderungen im Programmtext vornimmt. Diese Änderungen sind jedoch nur temporär.
Präprozessorbefehle erkennen Sie am vorangestellten #-Zeichen. Kompilieren Sie das Programm noch einmal ohne #include <stdio.h>, dann sollte eine Fehlermeldung folgen, wie z.B. die folgende:
Error. function 'printf' should have a prototype.
printf() kommt doch im Programm vor? Richtig. printf() ist eine (Standard-) Funktion, die in #include <stdio.h> deklariert ist. include-Dateien nennt man auch Headerdateien. Suchen Sie das Verzeichnis INCLUDE auf Ihrem System (unter Linux ist das typischerweise /USR/INCLUDE oder /USR/BIN/INCLUDE und bei MS Windows z.B. C:\Name_des_Compilers\INCLUDE), und Sie werden noch viele andere Headerdateien darin entdecken, die später noch Verwendung finden.
Die Abkürzung stdio steht für Standard-I/O, also Standard-Ein- und Ausgabe. Es wird noch öfters auf die Headerdateien eingegangen, die ohnehin in jedem Programm benötigt werden. Später werden Sie auch eigene Headerdateien entwerfen und im Programm einbinden.
Weiter zur Programmausführung:
int main()
Hier beginnt das Hauptprogramm. Eine main-Funktion wird immer benötigt damit der Compiler weiß, wo er beginnen muss, dass Programm zu übersetzen. Auch wenn später mehrere Module (Funktionen), also mehrere Quellcode-Dateien, kompiliert werden (zu einer ausführbaren Datei binden), benötigen Sie immer eine main-Funktion. main heißt auf Deutsch so viel wie Hauptfunktion.
int steht für eine Dezimalzahl. Im Fall einer Funktion bedeutet dies, dass diese einen Rückgabewert hat, vom Typ int. In diesem Programm bekommt die main-Funktion den Rückgabewert 0 durch den Aufruf:
return 0;
Was bedeutet: Das Programm wurde ordnungsgemäß beendet. Es wird also mit return hier der Funktion main der Wert 0 zurückgegeben. Genaueres dazu in einem späteren Kapitel. Weiter mit:
{
printf(".....");
}
Zwischen den geschweiften Klammern steht der Anweisungsblock. Das heißt, in diesem Block befinden sich alle Anweisungen, die die Funktion int main() auszuführen hat. Natürlich können innerhalb eines Anweisungsblocks weitere Anweisungsblöcke verwendet werden. Das hört sich komplizierter an als es ist. Darauf wird später noch eingegangen.
|
Merke |
|
Geschweifte Klammern fassen Anweisungen zu einem Block zusammen. |
|
Und was geschieht in diesem Anweisungsblock:
printf("Hallo Welt\n");
printf() ist eine Funktion, die in #include <stdio.h> deklariert ist, wie bereits erwähnt wurde. Deswegen kann der Compiler, wenn Sie die Headerdatei #include <stdio.h> nicht im Programm angegeben haben, nichts mit printf() anfangen. Mit printf() kann eine beliebige Stringkonstante formatiert auf dem Bildschirm ausgegeben werden. Die Stringkonstante, in diesem Fall "Hallo Welt", die ausgegeben wird, steht immer zwischen zwei Hochkommata ("Stringkonstante"). Nicht erlaubt ist es, eine Stringkonstante über das Zeilenende fortzusetzen, wie etwa im folgenden Beispiel:
printf("Dies ist in C
nicht erlaubt");
Es gibt aber eine Ausnahme dieser Regel: indem Sie ein \ (Backslash) setzen. Hierzu ein Beispiel:
printf("Hier ist die Ausnahme der Regel \
dies hier ist erlaubt, dank Backslash");
Sie sollten aber dabei beachten, dass alle Leerzeichen nach dem Backslash in der nächsten Zeile ebenfalls bei der Ausgabe berücksichtigt werden. Das Zeichen '\n' in der Funktion von printf() bedeutet newline und erzeugt auf dem Bildschirm einen Zeilenvorschub, wie er mit der Tastatur durch die Taste ENTER ausgelöst wird. Es gibt noch mehr so genannte Escape-Sequenzen, die mit einem Backslash beginnen.
Jetzt zum Semikolon (;): Es wird hauptsächlich dazu verwendet, das Ende einer Anweisung anzuzeigen. Der Compiler weiß dann, hier ist das Ende der Anweisung von printf() und fährt nach der Abarbeitung der Anweisung mit der nächsten Zeile bzw. Anweisung fort.
|
Merke |
|
Anweisungen, denen kein Anweisungsblock folgt, werden mit einem Semikolon abgeschlossen. |
|