[an error occurred while processing this directive]
C. Hello World - das erste Programm in C
  1. Was macht dieses Programm ?
    Es hat sich im Laufe der Zeit eine kleine Sitte eingebürgert: zu jeder Programmiersprache gibt es ein sogenanntes "Hello-World" Programm. Dieses Programm tut nicht viel, es zeigt nur einen kurzen Text an. Das ist jedoch je nach Sprache durchaus ein komplexeres Unterfangen.

    Der Vorteil dieses Programms ist es jedoch, daß alle den Sinn verstehen und die Verwendung aller Tools zum Programmieren lernen müssen. Also ist es ein sehr hilfreiches Einstiegsprogramm.

    Hier die Arbeitsschritte in Kürze, sie werden im folgenden ausführlich erklärt. Am Anfang der Zeile schreibt das System das aktuelle Directory (eventuell zusammen mit dem User- und Rechnernamen) in eckigen Klammern, gefolgt von einem $. Dies ist der Prompt, nach dem wir etwas tippen können.

    1. Anlegen eines Directories, wir wollen doch etwas Ordnung im System haben ...
      [kurs]$ mkdir HelloWorld
    2. Wechseln in das eben angelegte Verzeichnis
      [kurs]$ cd HelloWorld
    3. Starten des Editors (s.u.)
      [HelloWorld]$ nedit hello.c &
    4. Eintippen des Source-Codes (s.u.) und abspeichern. Jetzt sehen wir uns das aktuelle Directory mal an:
      [HelloWorld]$ ls
      hello.c
    5. Aufruf des Compilers (die Meldungen ignorieren wir hier mal)
      [HelloWorld]$ gcc -o hello hello.c
      hello.c: In function `main':
      hello.c:4: warning: return type of `main' is not `int'
    6. Nochmal das Listing des Directories:
      [HelloWorld]$ ls
      hello* hello.c
    7. Start unseres Programms:
      [HelloWorld]$ ./hello
      Hallo Welt da draußen.
      [HelloWorld]$
  2. Der Source-Code
    Als Editor zum eintippen verwende ich den nedit, er ist bei der Linux-Version, die ich verwende dabei. Man sollte einfach verschiedene Editoren ausprobieren und sich dann für einen entscheiden. Welcher das ist, ist für diesen Kurs unerheblich. Wenn der Editor über ein Mausinterface verfügt (er also in einem Fenster arbeitet, wie z.B. der nedit oder emacs oder Advanced Editor) ist es einfacher zu arbeiten. Ein Editor, der auf jedem Unix-System funktioniert ist der vi, er ist jedoch ohne Maus und läuft im aktuellen Terminal.

    Beim Start des Editors oben stand ein & am Ende, das bedeutet, der Editor wird gestartet, aber das System wartet nicht auf das Ende, wir können sofort einen neuen Befehl eingeben. Das nennt man Hintergrundverarbeitung.

    Hier ein Screenshot meines Editors mit dem kompletten Sourcecode des Hello-World-Programms, die Erklärungen folgen:
  3. Aufruf des Compilers
    Als Compiler verwende ich den bei allen Linux-Versionen vorhandenen gcc (GNU C-Compiler). Er ist Lizenzfrei verfügbar, es darf nur nichts daran geändert werden (man bekommt sogar den Source des Compilers).

    Der Aufruf lautet gcc -o hello hello.c und bedeutet im Einzelnen:
    • gcc startet den Compiler
    • -o hello gibt an, daß der Output in die Datei mit Namen hello geschrieben wird. Wenn dieser Parameter weggelassen wird, heißt die Datei a.out.
    • hello.c ist die Eingabedatei mit dem Sourcecode. Der Compiler weiß anhand der Erweiterung (.c) daß es sich um ein Standard-C-Programm handelt.
    Der Compiler kennt noch viele verschiedene Parameter, die in diesem Kurs nur dann erklärt werden, wenn sie wirklich benötigt werden. Für alles weitere verweise ich auf die Online-Hilfe bzw. Man-Pages.
  4. Das Programm in allen Einzelheiten
    #include <stdio.h>
    Hier wird ein Header-File (.h) von einer Standard-Bibliothek eingebunden. Das ist notwendig, weil der Compiler sonst keine Funktionen kennt und immer mit einer Fehlermeldung (bzw. Warnung) kommen würde. Es gibt viele verschiedene Header-Files, wir werden später auch selber welche schreiben. In dem File stdio.h werden alle Standard-I/O Befehle definiert (Ein- und Ausgaben).

    void main()
    Mit diesem Statement beginnt unser Programm immer. Es wird eine Prozedur ohne Rückgabewert definiert (void), die den Namen main hat. Dieser Name ist zwingend vorgeschrieben, sonst weiß der Compiler ja nicht, wo das Programm anfängt. Wir werden später sehr viele weitere Prozeduren und Funktionen schreiben, deren Namen wir uns selbst ausdenken können. Die runden Klammern geben an, daß dies eine Prozedur oder Funktion ist, die in diesem Fall keine weiteren Parameter bekommt. Später benutzen wir eine Abwandlung dieser Main-Funktion mit Parametern und einem Rückgabewert.
    Normalerweise sollte die Main-Funktion als Rückgabewert eine Integer-Zahl bekommen, diese wird dem Betriebssystem als Fehlercode zurückgegeben. Daher hat der Compiler auch bei uns eine Warnung ausgedruckt.
    Im weiteren werde ich nur von Funktionen sprechen, jede Prozedur ist eine Funktion ohne Rückgabewert.

    {
    Alle Statements werden zu Blöcken zusammengefasst. Jede Funktion besteht aus genau einem Block. Innerhalb dieses Blocks können beliebig viele andere Blöcke definiert werden. Die geschweifte Klammern umranden jeden Block. An einigen Stellen, wenn innerhalb eines Blocks nur ein Statement steht, können die Klammern weggelassen werden. Bei Beginn und Ende einer Funktion ist das jedoch nicht möglich.

    printf( "Hallo Welt da draußen.\n" );
    Dies ist unser einziges Statement, welches etwas tut: es gibt den angegebenen Text aus. Hier sehen wir mehrere für alle Programme wichtige Dinge:
    • Jedes Statement wird mit einem ; abgeschlossen.
    • Dieses Statement ruft ein (vordefiniertes) Unterprogramm auf. Die Parameter werden in runde Klammern eingeschlossen.
    • Textstrings werden mit doppeltem Hochkomma umrahmt.
    • Ein Sonderzeichen wird mittels Backslash \ eingeleitet. Das Sonderzeichen hier erzeugt eine neue Zeile nach unserer Ausgabe. Es ist das am häufigsten verwendete Steuerzeichen.
    Die Funktion printf ist eine Standard-Funktion zur Ausgabe von Texten auf das aktuelle Terminal (von wo das Programm gestartet wurde). Es gibt einige Abwandlungen dieser Funktion (fprintf für Dateien oder sprintf für Strings) die ich dann erkläre, wenn wir sie brauchen. Der Text in dem printf Aufruf ist das sogenannte Format. Wie wir damit auch Zahlen und anderes ausgeben können, werde ich später erklären.

    }
    Hier ist der Block und unser erstes Programm fertig. Ich denke, bis hierher konnten alle folgen. Im übernächsten Kapitel werden wir uns das ganze mal in C++ ansehen. Jetzt erst mal ein Blick auf unser großes Projekt-Ziel ...

[an error occurred while processing this directive]