PDA

View Full Version : IF in COBOL funktioniert nicht immer



Seiten : 1 [2]

Fuerchau
26-02-09, 16:47
Section-Grenzen stimme ich zu, "IF" stimme ich nicht zu.

Wenn man sich mal die Mühe gemacht hat, den MI-Code zu studieren, sieht man folgendes:

Ein Perform setzt für eine Section bzw. einen Paragraph eine Rücksprungadresse.

Wird nun an Stelle des Perform ein GO TO verwendet, erfolgt der Rücksprung mit der zuletzt gemerkten Adresse.
War diese mangels Perform nicht initialisiert, läuft das Programm da weiter.

Das ist auch der Grund, warum ein rekursiver Perform nicht funktioniert, da Rücksprünge nicht über einen Stack laufen.

RPG/LE kennt das i.Ü. genauso.
Ich kann zwar nicht per GOTO in eine BEGSR-Routine springen, das lehnt der Compiler ab.
Was der aber nicht verhindert ist eine Rekursion von EXSR-Aufrufen, was mir schon mal passiert ist.

Auch hier sieht man in der MI-Auflösung, dass die EXSR-Anweisung nur die Rücksprungadresse (per GOTO) des ENDSR setzt.

EXSR UPA

UPA BEGSR
EXSR UPB
EXSR UPC
ENDSR

UPB BEGSR
: tuwas
ENDSR

UPC BEGSR
EXSR UPA <= Dieser überschreibt den Rücksprung von ganz oben
ENDSR

pwrdwnsys
03-03-09, 06:51
Section-Grenzen stimme ich zu, "IF" stimme ich nicht zu.

.....


Stimmt, dabei hätte ich geschworen, das ich den Fall vor langer Zeit mal gehabt habe. Hab versucht den Fehler zu provozieren - leider (oder zum Glück) vergeblich !

K.