2012-04-30 29 views
11

Tại sao trình biên dịch Delphi bỏ qua dấu ngoặc đơn bị thiếu này?Trình biên dịch bỏ qua dấu ngoặc đơn còn thiếu của lệnh Thoát

function Test: Boolean; 
begin 
    Exit(True; // <-- eek! it compiles... 
end; 

Tôi tìm thấy một số mã của mình trông như thế này và trước tiên nghĩ rằng Delphi bỏ qua đơn vị của tôi - nhưng nó chỉ bỏ qua loại lỗi cú pháp này. Vì vậy, bây giờ tất nhiên tôi muốn biết tại sao.

+5

Điều này trông giống như một lỗi trong trình biên dịch cho tôi. –

+0

Tương tự trong bản cập nhật XE2 4. Lỗi Insight đánh dấu nó mặc dù. –

+0

tôi đoán nó sẽ là vì hàm không chứa gì khác, nó bỏ qua chính hàm đó. Thử thêm một số mã trước khi thoát. – CyprUS

Trả lời

1

Tôi đoán Exit được coi là một mã thông báo cho chính nó, và như vậy bất cứ điều gì được xác định trong cùng phạm vi sau Exit chỉ đơn giản là bỏ qua bởi trình biên dịch (vì nó không thể thực hiện các hướng dẫn anyway).

+0

Thêm hướng dẫn sau khi 'Thoát (True;' làm cho trình biên dịch phàn nàn lại với "E2066 Toán tử còn thiếu hoặc dấu chấm phẩy" (Delphi XE) –

+0

Tôi đoán điều này là do dấu chấm phẩy nhắc trình biên dịch tìm cách biên dịch lệnh tiếp theo. – LaKraven

+0

Về cơ bản tôi đang nói rằng 'Thoát' là một mã thông báo" tuyệt đối ", khiến trình biên dịch bỏ qua bất kỳ ký tự tiếp theo nào trên cùng một câu lệnh cho đến lần xuất hiện tiếp theo của dấu chấm phẩy, phân tách nó khỏi (các) hướng dẫn tiến hành. một sự gian lận, chắc chắn ... và một điều thú vị! – LaKraven

0

Có thể trình biên dịch đang nghĩ rằng 1. Có một lối ra, hoặc 2. Có một lối thoát với một tập hợp các dấu ngoặc đơn(). Nếu nó không tìm thấy số 2, nó sẽ chuyển sang # 1.

Các vấn đề liên quan