Liebe Leute,
ist die Verwendung von
"gpc version 20041218, based on gcc-2.95.2"
im Grundsatz in Ordnung oder sollte ein neuerer gcc
verwendet werden? Welche Kombination gilt zZ als die
beste?
Ich hatte in der Kombination eines älteren gpc mit
einem neueren gcc einen etwas seltsamen Fehler (das
Erweitern eines RECORD um eine (integer-)Variable
(ohne daß sie benutzt wurde) führte grundsätzlich
zu einem Speicherzugriffsfehler), weshalb ich die
gpc-Version geändert habe ... das hat geholfen, das
Programm lief dann einwandfrei ...
Nun habe ich in dieser Version jedoch auch einen
sonderbaren Fehler in einem ganz einfachen Konstrukt:
WHILE Zeiger <> NIL
DO BEGIN
....
Zeiger := Zeiger^.Folgender;
END;
dies führt zu einem Speicherzugriffsfehler an der
Stelle "Zeiger := Zeiger^.Folgender" (innerhalb der
Schleife wird der Zeiger nicht manipuliert). Es
läßt sich zeigen, daß "Zeiger^.Folgender = NIL" ist.
absurder Weise geht:
WHILE Zeiger^.Folgender <> NIL
...
mit der unerwünschten Folge, daß das jeweils letzte
Element (erwartungsgemäß) nicht bearbeit wird.
Dieses Verhalten ist kontextabhängig. Das Konstrukt
funktioniert im gleichen Programm an verschieden Stellen
wie gewünscht. Daraus ergeben sich folgende Fragen:
1. Gibt es eine Möglichkeit solche Kontextabhängigkeiten
gezielt zu untersuchen, wenn ja wie, welche?
2. Gibt es eine Möglichkeit den Compiler zu überreden
möglichst nah am Code zu übersetzen (-O0 half nichts)?
Dank im Voraus!
Grüße
Egbert