Programmeren in PL/1/Foutenafhandeling

Programmeren in PL/1

Bewerkingen
  1. Inleiding
  2. Declaratie van variabelen
  3. Procedures
  4. Programmastructuur
  5. Foutenafhandeling
  6. Tips en rekenregels

PL/1 voorziet foutafhandeling (error handling, recovery).

Soorten fouten bewerken

  • OVERFLOW exponent-overflow
  • UNDERFLOW exponent-underflow
  • FIXEDOVERFLOW fixed-point-overflow
  • SIZE fixed-point-overflow
  • ZERODIVIDE deling door nul
  • SUBSCRIPTRANGE indexbereik
  • STRINGRANGE substringbereik
  • STRINGSIZE stringlengte
  • ENDFILE einde van het bestand
  • ENDPAGE einde van de pagina
  • ATTENTION oproep via het klavier

De gebruiker kan het systeem fouten laten rapporteren en een vooraf gekozen actie uitvoeren door middel van ON. Het opvangen van de fout wordt maar actief na het uitvoeren van de ON-lijn.

PL/1-code: ON OVERFLOW

 ...
 ON OVERFLOW SNAP GO TO einde;
 a = b * c;
 ...
 einde:
 ...

In bovenstaand voorbeeld zal, indien b maal c de maximale toegelaten waarde voor a overschrijdt, gesprongen worden naar de lijn met het label 'einde'.

SNAP zorgt voor het afdrukken van een foutenbericht samen met de plaats waar de fout opgetreden is.

SUBSCRIPTRANGE bewerken

PL/1-code: SUBSCRIPTRANGE

 (SUBSCRIPTRANGE):
 a: PROC;
  DCL x(10) FLOAT;
  DCL (i, k) FIXED BIN;
 
  ON SUBSCRIPTRANGE SNAP 
                       BEGIN; 
                             PUT SKIP LIST ('Onbestaand element op positie ');
                             PUT DATA (i); 
                             STOP; 
                       END;
  GET LIST(k);
  DO i = 1 to k;
     x(i) = 0;
  END;
 END a;

Als in bovenstaand voorbeeld een waarde hoger dan 10 opgegeven wordt, zal de DO-loop ervoor zorgen dat i uiteindelijk de waarde 11 krijgt, waardoor het onbestaande element x(11) uit de array x() zal aangesproken worden.

EOF/EOP bewerken

ON ENDFILE en ON ENDPAGE zijn gebeurtenissen die geen echte fouten zijn, maar die wel moeten opgevangen worden met een gepaste actie zoals het stoppen van het lezen van het bestand of het afdrukken van een nieuw paginahoofd.

PL/1-code: ON ENDPAGE - ON ENDFILE

 ON ENDPAGE PUT PAGE LIST('Bladzijde', paginanummer);
 ON ENDFILE(bestand1) go to volgende;

zelf-opgeroepen gebeurtenissen bewerken

Een programmeur kan zelf een fout uitlokken:

PL/1-code: SIGNAL

 IF (deeltal = 0) THEN 
       SIGNAL ZERODIVIDE;

zelf-gedefinieerde gebeurtenissen bewerken

PL/1-code: ON ...

 ON kookt GO TO kooktijd;
 IF (temperatuur >= 100) THEN 
       SIGNAL kookt;
 
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.