|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Und zum Schluß nochnmals zu unserem Cookie Jar. Wir können jetzt einige Teile auch in Funktionen auslagern.
#ifdef __TURBOC__ #include <tos.h> #else #ifdef __GNUC__ #include <osbind.h> #else #include <tosbind.h> #endif #endif #include <stdio.h> typedef struct cookie_entry { union { unsigned long name_long; char name_array[4]; } name; unsigned long value; } CookieEntry; CookieEntry *GetCookieJar(void) { long OldStack; CookieEntry *CookieJar; OldStack = Super(0L); CookieJar = *((CookieEntry**)0x5a0L); Super((void *)OldStack); return CookieJar; } void PrintCookie(CookieEntry *Cookie) { printf("Name des Cookies: %d\n", Cookie->name.name_long); printf("Wert des Cookies: %d\n", Cookie->value); } int IsNullCookie(CookieEntry *Cookie) { return (Cookie->name.name_long == 0); } void TraverseCookieJar(CookieEntry *Cookie) { while (!IsNullCookie(Cookie)) { PrintCookie(Cookie); Cookie++; } } int main(void) { CookieEntry *CookieJar; CookieJar = GetCookieJar(); if (CookieJar == (CookieEntry *)0) printf("Dieses System hat keinen Cookie Jar\n"); else TraverseCookieJar(CookieJar); return 0; }
Was haben wir jetzt gewonnen außer mehr Code? Zum einen können die Funktionen an anderer Stelle wiederverwendet werden. Auch in einem anderen Programmen, wie wir im Kapitel über modulares Compilieren sehen werden. Zum anderen wird das Programm leichter verständlich. Denn jede Teilaufgabe ist in eine Funktion verschoben worden, die ihre Aufgabe auch als Namen trägt. Und diese Vorgehensweise erlaubt es, ein Programm nicht sofort komplett verstehen oder auch programmieren zu müssen. Zuerst nimmmt man sich main vor. Wir ermitteln den CookieJar und wenn wir einen Zeiger darauf bekommen, durchwandern wir ihn. Eigentlich doch ganz einfach. Und dann können wir uns einer der beiden Funktionen zuwenden und sie weiter analysieren. Bei der Entwicklung wird diese Vorgehensweise "top down" genannt. Wir zerlegen das große Problem in kleinere Teilprobleme, die wir nacheinander lösen. Diese Teilprobleme kann man wieder weiter zerlegen. Dies führt man solange durch, bis sich das Teilproblem leicht lösen läßt.
English version not yet available. |