COBOL (mainframe IBM)
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
.
Se si esegue il programma sopra (qualsiasi COBOL mainframe IBM dal COBOL II (primo compilatore IBM allo standard 1985, probabilmente anche altri IBM COBOL) l'output è:
22/02/14 13.11.02 CIAO MONDO!
Tuttavia, se si rimuove la linea triplicamente inutile "SPOSTA SPAZIO SU W-QUANDO COMPILATO". (il campo ha un valore iniziale di spazio e contiene altro contenuto inserito nell'istruzione successiva ed è comunque ramificato) il programma non produce alcun output e effettivamente Abends (U4038) (significa che si arresta in modo anomalo) con il seguente messaggio :
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.
(il codice e il testo del messaggio variano tra i compilatori, gli offset dipendono dall'effettivo compilatore utilizzato e dalle opzioni di compilazione, l'indirizzo dipende da dove viene caricato il programma quando viene eseguito).
Il motivo è il NEXT SENTENCE
. Questo è un Secret GO TO
. Il compilatore cerca il punto / punto successivo successivo nella sorgente e genera un ramo alla seguente istruzione. Da COBOL II, l'uso di punti pieni / periodi è stato rilassato. Un programma deve terminare con un punto / punto completo. In questo caso, il ramo è fuori dalla fine del programma.
Entrambi i programmi vengono compilati al 100% (nessun messaggio diagnostico, codice di ritorno pari a zero).
Questo comportamento è una stupida "estensione IBM" di COBOL. Lo standard del 1985 non consente NEXT SENTENCE
all'interno IF
/ END-IF
( CONTINUE
viene utilizzato invece, che è un non-op). IBM lo permetteva, causando di tanto in tanto orribili Gotcha.