Thứ tự được tính trong đó các tham số được tính trước khi một thủ tục được gọi là định nghĩa trong Delphi?Trong Delphi, các tham số được đánh giá theo thứ tự khi được chuyển vào một phương thức?
IOW, nếu tôi có mã xấu xí này (tìm thấy một cái gì đó như thế này trong một ứng dụng di sản) ...
function A(var err: integer): integer;
begin
err := 42;
Result := 17;
end;
Test(A(err), err);
... là thử nghiệm đảm bảo để nhận được các thông số (17, 42) hoặc có thể nó cũng được (17, không xác định)?
Edit:
Mặc dù ví dụ của David trả về kết quả khác nhau với 32-bit và 64-bit trình biên dịch, điều này (may mắn) không ảnh hưởng đến mã di sản của tôi, vì thử nghiệm (A (err), err) chỉ lưu trữ một địa chỉ của 'err' trong thanh ghi và nó không quan trọng cho dù trình biên dịch thực hiện điều này trước khi gọi A (err) hoặc sau.
Bài viết này có thể quan tâm http://blog.barrkel.com/ 2008/04/c-evaluation-order-gotcha.html –
Một bài đăng khác về điều này: http://stackoverflow.com/questions/3054526/delphi-compiler-directive-to-evaluate-arguments-in-reverse –
@David, Tôi đã nhận thức được tính năng C 'này và tôi đã học trên SO rằng Java và C# đánh giá từ trái sang phải nhưng tôi không thể nhớ nơi Delphi có tài liệu này (và như chúng ta đã học, tài liệu sai). – gabr