006
27.06.2003, 00:13 Uhr
ao
(Operator)
|
Na ja, daß Prüfungsaufgaben manchmal sinnfrei sind, damit muß man leben, glaube ich. Viel schlimmer finde ich den katastrophalen Stil dieses Programms und die Vorstellung, daß die Schüler sich irgendwas davon zum Vorbild nehmen könnten.
Konkret:
1. main retourniert nichts -> im Fall von main kein Fehler (glaube ich), aber auf jeden Fall unschön.
2. Die Deklaration sv [LEN * sizeof long / sizeof short]; Willkürliche Verklausulierung der Längenangabe. Wenn das nicht willkürlich ist, sondern einen Grund hat, gehört das kommentiert. An anderen Stellen ebenso.
3. Die Statements P( i = (int) sv + POS * sizeof(long) ); und P(*(short*)i); und P(*(long*)i); Willkürliches Umwandeln von Zeigertypen in Ganzzahltypen und zurück, sog. "inconsistent level of indirection". So was ist fast immer ein logischer Fehler, der gerne mal eine Access-Violation zur Folge hat. Auf jeden Fall ist es verwirrend und mißbräuchlich, den Wert einer Integer-Variablen auf einmal als Speicheradresse zu interpretieren. Auch hier: Derart unkonventioneller Code muß, wenn er beabsichtigt ist, unbedingt kommentiert werden.
4. Das Print-Makro. %x ist nicht das Formatkennzeichen für die Ausgabe von Zeigervariablen. Das Verhalten von printf ist undefiniert; der ausgegebene Wert kann falsch sein. %p wäre richtig.
5. Das Statement P( zlv = (long (*) [LEN]) sv); Im Prinzip dasgleiche wie Punkt 3. Aus dem short-Array wird ein Zeiger-Array; die dort im Speicher stehenden Zahlen werden auf einmal komplett uminterpretiert und wie Zeiger behandelt. Es fehlt bloß noch, daß sie dereferenziert werden.
6. Statement P(sv[i]=i), aber auch etliche andere Stellen: Zuweisung (-> Ausdruck mit Seiteneffekten) im Argument eines Funktionsmakros! Großes Pfui! Jeder kennt das Beispiel #define max(a,b) a>b?a:b. Frage: Wie oft wird i inkrementiert, wenn max (i++, 10) aufgerufen wird, einmal oder zweimal? Antwort: Es kommt auf den Wert von i an. Nach solchen Fehlern kann man tagelang suchen, und hinterher könnte man den, der das programmiert hat, in Streifen schneiden.
Ob man das alles dem Lehrer vor die Nase halten sollte, weiß ich nicht. In einem günstigen Moment und sachlich vorgetragen kann es hilfreich sein. Auf keinen Fall sollte es wie eine Retourkutsche für eine vergeigte Prüfung aussehen.
Was ist das eigentlich für eine Prüfung? Berufsausbildung? Allgemeinbildende Schule?
ao Dieser Post wurde am 27.06.2003 um 00:14 Uhr von ao editiert. |