[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jul 2005
    Beiträge
    232
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Sprungmarke 2x ?
    => Wird vom Compiler bereits abgelehnt
    IF-Abfragen überrennen ?
    => nur bei Dezimalfehlern, die ignoriert werden, hier wird aber ein Zeichenvergleich gemacht

    Der einzige Grund kann sein, dass ein
    READ ... AT END
    oder
    READ ... INVALID KEY
    nicht korrekt mit GOTO oder Status-Feld abgefangen wird und somit der IF auf den vorherigen Inhalt vergleicht.
    Ungter V5R3 leider noch keine Ablehnung. Aber fatal ist folgendes:

    AAA SECTION.

    GOTO MARKEXXX.
    EXIT.

    BBB SECTION.
    MARKEXXX.
    EXIT.

    Führt auch dazu, das das Programm macht was es will. Wenn ich dann einen Trace der ausgeführen Anweisungen anschaue, läuft das Programm zum Anfang und dann (meist) 1x komplett bis zum Ende durch, ohne sich an Sectiongrenzen oder IF's zu stören. Hatte ich schon ein paar mal in diversen Programmen.

    Fazit: Wodurch unterscheiden sich gute von schlechten Programmierern ? Die guten denken daran, nach dem Kopieren alle betroffenen Stellen zu ändern!

    -K.-
    __________________________________
    -An eye for an eye leaves the whole world blind- -Mahatma Ghandi-

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.700
    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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jul 2005
    Beiträge
    232
    Zitat Zitat von Fuerchau Beitrag anzeigen
    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.
    __________________________________
    -An eye for an eye leaves the whole world blind- -Mahatma Ghandi-

Similar Threads

  1. Dekleration Cobol <-> RPG
    By Xanas in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 12-01-07, 07:32
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. Cobol <> RPGLE
    By Xanas in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 13-12-06, 13:38
  4. Hilfe! Rollback bei Transaktionen funktioniert nicht
    By remo2010 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 23-11-06, 13:31
  5. Cobol
    By Uli Müller in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 09-11-06, 09:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •