COBOL (IBM Mainframe)
ID DIVISION.
PROGRAM-ID. USELESS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 W-WHEN-COMPILED PIC X(8)BX(8) VALUE SPACE.
PROCEDURE DIVISION.
IF W-WHEN-COMPILED EQUAL TO SPACE
NEXT SENTENCE
END-IF
MOVE SPACE TO W-WHEN-COMPILED.
MOVE WHEN-COMPILED TO W-WHEN-COMPILED
DISPLAY W-WHEN-COMPILED " HELLO WORLD!"
GOBACK
.
Si vous exécutez le programme ci-dessus (n'importe quel IBM Mainframe COBOL depuis COBOL II (premier compilateur IBM au standard de 1985, probablement aussi d'autres COBOL IBM), la sortie est:
22/02/14 13.11.02 BONJOUR MONDE!
Cependant, si vous supprimez la ligne triplement inutile "DÉPLACER L'ESPACE VERS W-UNE FOIS COMPILÉ". (le champ a une valeur initiale d'espace et contient d'autres contenus dans l'instruction suivante, et il est de toute façon ramifié) le programme ne produit aucune sortie et en fait Abends (U4038) (ce qui signifie qu'il se bloque) avec le message suivant :
IGZ0037S The flow of control in program USELESS proceeded beyond the
last line of the program. From compile unit USELESS at entry
point USELESS at compile unit offset +000003AC at entry offset
+000003AC at address 119003AC.
(le code et le texte des messages varient selon les compilateurs, les décalages dépendent du compilateur réel utilisé et des options de compilation, l'adresse dépend de l'endroit où le programme est chargé lors de son exécution).
La raison en est NEXT SENTENCE
. Ceci est un Secret GO TO
. Le compilateur recherche le prochain point final / période dans la source et génère une branche vers l'instruction suivante. À partir de COBOL II, l'utilisation des arrêts complets / périodes a été assouplie. Un programme doit se terminer par un point / période complète. Dans ce cas, la branche est hors de la fin du programme.
Les deux programmes compilent 100% de nettoyages (pas de messages de diagnostic, code retour nul).
Ce comportement est une "extension IBM" stupide pour COBOL. La norme de 1985 ne permet pas NEXT SENTENCE
dans IF
/ END-IF
( CONTINUE
est utilisé à la place, ce qui est un no-op). IBM l'a autorisé - provoquant de temps en temps d'horribles Gotchas.