The following hints were published in issue 4 of the magazine „CHIP SPECIAL".
More hints for the Turbo Pascal compiler

Tückisch: Fehler im Turbo-Pascal-Compiler!

Zu unserem größten Erstaunen fanden wir im doch so perfekten Turbo-Pascal noch einige grobe Programmierfehler! Stellen Sie sich das doch einmal vor: Sie (ein Pascal-Profi) programmieren ein etwas umfänglicheres Programm (mit vielen, vielen WITH-Anweisungen) und kommen trotz stundenlanger Fehlersuche nicht dahinter, wo die "Wanzen" versteckt sind. Zu guter Letzt ist der Fehler endlich lokalisiert, nämlich im Compiler! Genau das ist uns nämlich passiert.

Die Fehler betreffen die CP/M- und die MS-DOS-Version von Turbo-Pascal fast in gleicher Weise.

1) WITH-Anweisung:
Es kommt vor, daß Konstanten nicht von der WITH-Anweisung überlagert werden, was man als selbstverständlich erwarten sollte.

Beispiel:
const xmax=100;
var T:record
       xmax,ymax : integer;
      end;

begin
  T.xmax:=55;
  with T do
    begin
      writeln(xmax);
      ymax:=xmax;
    end;
  writeln(t.ymax);
end.
Anstatt beide Male 55 auszugeben, ergibt sich bei CP/M die Ausgabe zwei mal 100 und bei MS-DOS 100 und 55.
Dieser Fehler ist sicher der gefährlichste, weil hier in der Regel keine Fehlermeldung ausgelöst wird.

2) Funktions-Zuweisungen (nur CP/M)

In der CP/M-Version von Turbo-Pascal kann man, ohne daß der Compiler sich darüber im geringsten beschwert, einer Funktion ein Ergebnis außerhalb des Funktionsrumpfes zuweisen. (Wo die Funktionsvariable natürlich nie und nimmer definiert ist!) Dieser Fehler schlägt immer dann zu, wenn man versehentlich das Funktionsergebnis der falschen Funktion zuweist. Vielleicht ist Ihnen aufgefallen, daß im Programm DISKZAP (CP/M-Version aus Heft 2) sich dieser Fehler unbemerkt eingeschlichen hat.

3) Funktionsnamen-Uberlagerung (beide Versionen)

Es ist möglich, daß eine Funktion und eine in derselben definierte Konstante den selben Namen haben. Das sollte natürlich eine entsprechende Fehlermeldung verursachen, weil man dann sicherlich kein Ergebnis mehr nach außen geben kann. Dem ist aber nicht so.

Neuer Turbo-Befehl gefunden!

Sicher kennen die meisten unserer Leser die Compileranweisung C-, die die CTRL-C Abfrage abschaltet. Diese Anweisung wirkt für das gesamte Programm und kann nicht wieder abgeschaltet werden. Oder doch? Manchmal möchte man ein Programm an einer kritischen Stelle abbrechen und gleichzeitig woanders ein CTRL-C als Eingabe zulassen. Für diese Zwecke haben die Turbo-Programmierer vorgesorgt, ohne das im Handbuch zu erwähnen! Des Rätsels Lösung heißt CBREAK und ist eine vordefinierte Variable vom Typ BOOLEAN. Diese ist zumindest in den CP/M und MS-DOS Versionen 3.0 vorhanden. CBREAK:=TRUE, falls die CTRL-C Unterbrechung erlaubt ist (C+) und FALSE wenn nicht (C-). Diese Variable kann man während des gesamten Programms umbesetzen, was dieselbe Wirkung wie eine entsprechende Compiler-Anweisung hat.
B.E.

Beispiel:
PROCEDURE Test(VAR ch : CHAR);
  BEGIN
    CBREAK:= FALSE;
    READ (KBD,ch);
    CBREAK:= TRUE;
  END;

Scanned by Werner Cirsovius
December 2004
© CHIP Verlag