¿El orden en el que se calculan los parámetros antes de que se llame un procedimiento definido en Delphi?En Delphi, ¿los parámetros se evalúan en orden cuando se pasan a un método?
OIA, si tengo este código feo (que se encuentra algo como esto en una aplicación heredada) ...
function A(var err: integer): integer;
begin
err := 42;
Result := 17;
end;
Test(A(err), err);
... es la prueba garantizada para recibir parámetros (17, 42) o podría también ser (17, indefinido)?
Editar:
Aunque el ejemplo de David devuelve un resultado diferente con 32 bits y 64 bits del compilador, este (por suerte) no afecta mi código heredado porque la prueba (A (err), err) solo almacena una dirección de 'err' en el registro y no importa si el compilador hace esto antes de llamar a A (err) o después.
Este artículo puede ser de interés http://blog.barrkel.com/ 2008/04/c-evaluation-order-gotcha.html –
Otra publicación sobre esto: http://stackoverflow.com/questions/3054526/delphi-compiler-directive-to-evaluate-arguments-in-reverse –
@David, Era consciente de esta C 'característica' y aprendí en SO que Java y C# evalúan de izquierda a derecha, pero no podía recordar dónde ha documentado Delphi (y como hemos visto, la documentación es incorrecta). – gabr