Trước khi đọc phần còn lại của câu trả lời này, vui lòng đọc Đi đến Tuyên bố Được coi là Có hại . Nếu bạn không muốn đọc toàn bộ, đây là điều tôi coi là điểm mấu chốt:
Việc sử dụng không hạn chế câu lệnh go to có hậu quả ngay lập tức là rất khó tìm được một tập hợp tọa độ có ý nghĩa để mô tả tiến trình của quá trình.
Hoặc để diễn đạt lại, vấn đề gotolà chương trình có thể đến giữa một khối mã, mà lập trình viên không hiểu trạng thái chương trình tại thời điểm đó. Các cấu trúc hướng khối tiêu chuẩn được thiết kế để phân định rõ ràng các chuyển đổi trạng thái, một cấu trúc được gắn nhãn breaknhằm mục đích đưa chương trình đến một trạng thái đã biết cụ thể (bên ngoài khối có nhãn chứa).
Trong một chương trình mệnh lệnh thế giới thực, trạng thái không được phân định rõ ràng bởi các ranh giới khối, vì vậy sẽ có câu hỏi liệu việc gắn nhãn có phải breaklà một ý tưởng hay hay không. Nếu khối thay đổi trạng thái có thể nhìn thấy từ bên ngoài khối và có nhiều điểm để thoát khỏi khối, thì một được gắn nhãn breaktương đương với khối nguyên thủy goto. Sự khác biệt duy nhất là, thay vì có cơ hội hạ cánh ở giữa một khối có trạng thái không xác định, bạn bắt đầu một khối mới với trạng thái không xác định.
Vì vậy, nói chung, tôi sẽ coi một nhãn hiệu breaklà nguy hiểm. Theo ý kiến của tôi, đó là một dấu hiệu cho thấy khối nên được chuyển đổi thành một chức năng, với quyền truy cập hạn chế vào phạm vi bao quanh.
Tuy nhiên, mã ví dụ này rõ ràng là sản phẩm của trình tạo phân tích cú pháp (OP nhận xét rằng đó là mã nguồn Xerces). Và trình tạo phân tích cú pháp (hay trình tạo mã nói chung) thường có quyền tự do với mã do chúng tạo ra, bởi vì chúng có kiến thức hoàn hảo về trạng thái và con người không cần phải hiểu nó.
label913định nghĩa ở đâu?