COBOL (Máy tính lớn của 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
.
Nếu bạn chạy chương trình trên (bất kỳ COBOL Mainframe nào của IBM kể từ COBOL II (trình biên dịch IBM đầu tiên theo tiêu chuẩn 1985, có thể là các COBOL khác của IBM) thì đầu ra là:
22/2/14 13.11.02 THẾ GIỚI HELLO!
Tuy nhiên, nếu bạn loại bỏ dòng ba lần vô dụng "DI CHUYỂN SPACE TO W-WHEN-COMPILED." (trường có giá trị ban đầu của không gian và có nội dung khác được đặt trong hướng dẫn tiếp theo và dù sao nó cũng được phân nhánh), chương trình không tạo ra đầu ra và thực sự là Abends (U4038) (có nghĩa là nó gặp sự cố) với thông báo sau :
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.
(mã thông báo và văn bản sẽ khác nhau giữa các trình biên dịch, độ lệch phụ thuộc vào trình biên dịch thực tế được sử dụng và các tùy chọn biên dịch, địa chỉ phụ thuộc vào nơi chương trình được tải khi EXECuting).
Lý do là NEXT SENTENCE
. Đây là mộtSecret GO TO
. Trình biên dịch tìm kiếm toàn bộ điểm dừng / thời gian tiếp theo trong nguồn và tạo một nhánh theo hướng dẫn sau. Từ COBOL II, việc sử dụng toàn bộ điểm dừng / thời gian đã được nới lỏng. Một chương trình phải kết thúc với một điểm dừng / thời gian đầy đủ. Trong trường hợp này, chi nhánh sẽ kết thúc chương trình.
Cả hai chương trình đều biên dịch sạch 100% (không có thông báo chẩn đoán, Mã trả về bằng 0).
Hành vi này là một "Phần mở rộng IBM" ngu ngốc đối với COBOL. Tiêu chuẩn 1985 không cho phép NEXT SENTENCE
trong IF
/ END-IF
( CONTINUE
được sử dụng thay thế, đó là không có op). IBM đã cho phép nó - gây ra Gotchas khủng khiếp theo thời gian.