Ziel von Kapitel 3 ist es sich einen ersten Überblick vom Aufbau eines Programms zu machen. Außerdem wollen wir das Programm ausführbar machen, also übersetzen. Voraussetzung für dieses Kapitel ist, dass Sie sich nun einen Compiler besorgt und installiert haben.C C++ C/C++ ANSI C Programmieren C Kurs Compiler Hallo Welt Hallo Welt in C - Compiler Programmierung ANSI C Kapitel 3: Das erste Programm

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            zurück  Ein Kapitel tiefer  zum Inhaltsverzeichnis

Vielleicht haben Sie in diesem Buch schon ein wenig geblättert und sich die hinteren Kapitel angesehen. Wenn Sie gerade dabei sind, C zu lernen oder auch C Ihre erste Programmiersprache ist, dürfte vieles auf den hinteren Seiten ein wenig kryptisch auf Sie wirken. Als Vergleich könnte ich jetzt eine beliebige Fremdsprache nehmen, die Sie gerade lernen wollen. Wenn Sie dabei die hinteren Kapitel ansehen, wird es Ihnen genauso gehen wie mit diesem Buch, Sie werden mit den Fremdwörtern auch noch nichts anfangen können. Den besten Lernerfolg erzielen Sie also, indem Sie das Buch von vorn nach hinten durcharbeiten.

Wer C wirklich lernen will, sollte die Programme auch in der Praxis ausführen. Ideal wäre es natürlich, wenn Sie die Beispiele abtippen und ein wenig damit experimentieren, eventuell sogar mit Absicht Fehler einbauen und sich die Meldungen des Compilers ansehen, mit dem Ziel, möglichst viel daraus zu lernen.

Erhoffen Sie sich, dieses Buch in wenigen Tagen durchgearbeitet zu haben und dann ein Profi zu sein, werden Sie schnell enttäuscht sein. Programmieren zu lernen, dauert ein wenig länger. Wenn Sie aber Geduld haben und immer am Ball bleiben, ist der Grundstein einer Programmiererkarriere gelegt. Das "Programmieren lernen" beruht wie vieles im Leben auf dem Prinzip "Versuch und Irrtum".

3.2. Hallo Welt in C            zurück  Ein Kapitel tiefer  Ein Kapitel höher  zum Inhaltsverzeichnis

Obligatorisch ist es, mit dem berühmten "Hallo Welt"-Programm in C zu beginnen. Ziel dieses Programms ist es, die Textfolge "Hallo Welt" auf dem Bildschirm auszugeben. Tippen Sie im Texteditor (bzw. der Entwicklungsumgebung) folgendes Programm ein:

#include <stdio.h>

int main()
{
   printf("Hallo Welt\n");
   return 0;
}

Zunächst wird das Programm in einem Verzeichnis, wo immer das Programm zur Ausführung gebracht werden soll, mit der Endung - auch Extension genannt - "*.c" abgespeichert (wobei "*" für den beliebigen Namen des Programms steht). Jetzt müssen Sie das Programm übersetzen (kompilieren). Dieser Vorgang kann von Compiler zu Compiler verschieden ablaufen. Bei einer Entwicklungsumgebung muss dabei häufig nur der Button "Compile" oder "Kompilieren" angeklickt werden. In einer Konsole wird das Programm mit der Kommandozeile übersetzt.



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.1: "Hallo Welt" in einem Konsolenfenster unter MS-DOS

Abbildung 3.2: Programm Hallo Welt in einer Konsole unter Linux
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

3.3. Analyse des Programms            zurück  Ein Kapitel höher  zum Inhaltsverzeichnis

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.

Weiter mit Kapitel 4: Steuerzeichen            zum Inhaltsverzeichnis