Cẩn thận với việc sử dụng lệnh Exit
trong các hàm nội dòng! Tôi đã sử dụng Delphi XE3 ở đây.Có phải là lỗi cố gắng biên dịch mã này dẫn đến kết thúc IDE hoặc trình biên dịch không chạy?
Triệu chứng
Trong một số trường hợp, khi một cuộc gọi được thực hiện để một hàm nội tuyến có chứa Exit
lệnh, và sự trở lại giá trị của hàm inline được sử dụng trực tiếp trong WriteLn()
, trình biên dịch báo cáo một lỗi tin nhắn,
"dcc" exited with code 1.
hoặc thậm chí tệ nhất, IDE Delphi chấm dứt mà không có bất kỳ xác nhận nào.
function ProcessNumber(const iNumber: Integer): Boolean; inline;
begin
if iNumber = 0 then begin
Result := False;
Exit;
end;
// some code here ...
Result := True;
end;
procedure Test;
begin
writeln(ProcessNumber(0));
end;
begin
Test;
ReadLn;
end.
Tuy nhiên, nếu giá trị trả về của hàm inline được lưu trữ trong một biến, và sau đó biến được sử dụng trong WriteLn()
, vấn đề không xảy ra.
procedure Test;
var
b: Boolean;
begin
b := ProcessNumber(0);
writeln(b);
end;
Câu hỏi
- Đây có phải là một lỗi biên dịch?
- Nếu lỗi này, có cách nào khác để thoát khỏi một hàm an toàn không?
Nó làm cho tôi tự hỏi, anh có hy vọng điều này để thoát khỏi bối cảnh người gọi, hay chỉ là chức năng inline? – TLama
@TLama Tôi nghĩ người hỏi biết rằng 'inline' không thay đổi' lối ra' nghĩa là gì.Đó là AV nội bộ giết chết IDE đó là vấn đề. –