COBOL (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
.
위의 프로그램 (COBOL II 이후의 IBM Mainframe COBOL (첫 번째 IBM 컴파일러는 1985 표준, 아마도 다른 IBM COBOL) 이후)을 실행하면 출력은 다음과 같습니다.
02/22/14 13.11.02 안녕하세요 세계!
그러나 세 번 쓸모없는 줄 "MOVE SPACE TO W-WHEN-COMPILED"를 제거하면. (필드는 초기 공간 값을 가지며 다음 명령에서 다른 내용을 포함하며 어쨌든 분기됩니다) 프로그램은 출력을 생성하지 않으며 실제로 다음 메시지와 함께 이상 종료 (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.
(메시지 코드와 텍스트는 컴파일러마다 다르며, 오프셋은 사용 된 실제 컴파일러 및 컴파일 옵션에 따라 다르며, 주소는 EXECuted시 프로그램이로드되는 위치에 따라 다릅니다).
이유는 NEXT SENTENCE
입니다. 이것은입니다 Secret GO TO
. 컴파일러는 소스에서 다음 전체 정지 / 기간을 찾아 내고 다음 명령어에 대한 분기를 생성합니다. COBOL II부터는 전체 정지 /주기 사용이 완화되었습니다. 프로그램은 완전 정지 / 마침표로 끝나야합니다. 이 경우 분기는 프로그램 끝에서 벗어납니다.
두 프로그램 모두 100 % 깨끗하게 컴파일됩니다 (진단 메시지 없음, 리턴 코드 0).
이 동작은 COBOL에 대한 "IBM Extension"입니다. 1985 표준은 허용하지 않는 NEXT SENTENCE
내부 IF
/ END-IF
( CONTINUE
무 조작하지되는 대신에 사용된다). IBM은이를 허용하여 때때로 끔찍한 문제를 야기했습니다.