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
.
Якщо ви запускаєте вищевказану програму (будь-який IBM Mainframe COBOL починаючи з COBOL II (перший компілятор IBM до стандарту 1985 року, можливо, також і інші IBM COBOL), вихід:
22.02.14 13.11.02 ХЕЛО СВІТ!
Однак, якщо ви видалите триразово марний рядок "ПОВЕРНУТИСЯ ПРОСТІРУ В W-КОГО-СКЛАДЕНО". (поле має початкове значення простору та має інший вміст, розміщений у ньому в наступній інструкції, і воно все одно розгалужене) програма не видає вихід і насправді відмовляється (U4038) (це означає, що воно виходить з ладу) із наступним повідомленням :
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.
(код і текст повідомлення варіюватимуться між компіляторами. Зсуви залежать від реального компілятора, що використовується, і параметрів компіляції; адреса залежить від того, де програма завантажується при виконанні).
Причиною є NEXT SENTENCE
. Це Secret GO TO
. Компілятор шукає наступну повну зупинку / період у джерелі та генерує гілку до наступної інструкції. Від COBOL II використання повної зупинки / періодів було зменшено. Програма повинна закінчуватися повним зупинкою / періодом. У цьому випадку філія вимикається з кінця програми.
Обидві програми складають 100% чистоту (без діагностичних повідомлень, Код повернення нуля).
Така поведінка є німим "розширенням IBM" для COBOL. Стандарт 1985 р. Не дозволяє NEXT SENTENCE
в межах IF
/ END-IF
( CONTINUE
використовується натомість, що є неоперативним). IBM дозволила це - час від часу викликаючи жахливі Gotchas.