C-Kurs Teil 4 von Christoph Bach Zuerst möchte ich um Entschuldigung bitten, für den Ausfall des C-Kurses während der letzten zwei Monate. Ich hatte viel um die Ohren. Im heutigen Teil geht es um Unter- programme in C. Ein Unterprogramm heißt in C Funktion, da man davon ausgeht, daß immer etwas zurückgeliefert wird. Eine Funktion ist in C genauso aufge- baut, wie das Hauptprogramm. Statt main() steht dann z.B. hallo(), also der Name der Funktion, mit der diese später aufgerufen wird. Eine einfache Funktion, die nichts weiter tut als "Hallo" auf den Bildschirm zu schreiben sieht so aus: steht für das Semikolon hallo() $( printf("HalloÖn") $) Im Hauptprogramm (oder einer anderen Funktion) schreibt man einfach hallo() und schon wird die Funktion aufgerufen und beschriftet den Bildschirm. Natürlich kann an eine Funktion auch ein Wert übergeben werden. Dazu schreibt man in die Klammer nach dem Funktionsnamen den Namen des zu übergebenden Wertes. Dieser muß anschliesend noch deklariert werden, und kann dann wie eine normale Veriable verwendet werden. Ein Beispiel: zeig(a) int(a) $( printf("a hat den Wert %d.Ön",a) $) Der Wert der an die Funktion übergeben wird, wird von dieser am Bildschirm angezeigt. Wenn eine Funktion einen Wert zurückliefern soll, so gibt es dafür das Wort return(). Das was in den Klammern von return() steht, wird an die Variable übergeben, der der Wert der Funktion zugewiesen worden ist. add(a,b) int a,b $( return(a+b) $) Die funktion add() addiert die ihr übergebenen Werte a und b, und liefert das Ergebnis zurück. Dazu muß die Funktion einer Variablen zugewiesen werden z.B. a=add(5,7) woraufhin a den Wert 12 (5+7) hat. Selbstverständlich können die Funktionen sehr viel länger sein. Als Beispiel wurden nur extrem knappe Funktionen gewählt. Eine andere wichtige Eigenschaft von C ist der Präprozessor. Hinter diesem misteriösen Wort verbirgt sich nichts weiter als die Makrofunktion einer Textverarbeitung. Man definiert den Suchbegriff und den Text der ihn ersetzen soll. Vor der eigentlichen Compilierung wird jeder gefundene Suchbegriff ersetzt. Das kann u.U. sehr viel Tipparbeit sparen. z.B. #define gruss "Hallo, wie geht es Dir?Ön" Trifft der Präprozessor im C-Quelltext auf das Wort gruss, so ersetzt er es durch "Hallo, wie geht es Dir?Ön". In kommerziellen C-Compilern ist diese Funktion sehr ausgefeilt. Man kann dort sogar kleine Programmteile mit dem Präprozessor beschreiben, und hat zusätzlich die Möglichkeit während dem Übersetzen unterschiedliche Werte einzubinden oder Fallunterscheidungen zu treffen: #define quadrat(x) (x)*(x) #define max(a,b) ((a)>(b)?(a):(b)) Die obigen Beispiele habe ich auf dem ATARI nicht zum laufen gebracht. Das erste Beispiel berechnet das Quadrat einer Zahl. Wenn statt der Zahl ein Ausdruck z.B. a=quadrat(x+3) angegeben wird, sind die Klammern (x) dringend nötig, da es sonst zu einem falschen Ergebnis kommt. Im zweiten Beispiel treffen wir noch auf eine weitere Eigenheit von C. Das Fragezeichen und der Doppelpunkt wirken wie ein IF THEN ELSE. Ist der Ausdruck vor dem Fragezeichen wahr, so wird der Befehl nach dem Fragezeichen ausgeführt, sonst der Befehl nach dem Doppelpunkt. Das Beispiel liefert den grösseren von zwei Werten zurück. Zum Listing gibt es diesmal nur soviel zu sagen, daß es die Tipperei erspart. Alle Funktionen wurden hier im Text vorgestellt. Gut Byte.