L'ordine in cui i parametri vengono calcolati prima che una procedura venga definita in Delphi?In Delphi, i parametri vengono valutati in ordine quando vengono passati a un metodo?
IOW, se ho questo codice brutto (trovato qualcosa di simile in un'applicazione legacy) ...
function A(var err: integer): integer;
begin
err := 42;
Result := 17;
end;
Test(A(err), err);
... è Test garantito per ricevere i parametri (17, 42) o potrebbe anche essere (17, non definito)?
Edit:
Anche se l'esempio di David torna risultato diverso con 32-bit e 64-bit compilatore, questo (per fortuna) non influenza il mio codice legacy a causa di prova (A (err), err) solo negozi un indirizzo di "err" nel registro e non importa se il compilatore lo fa prima di chiamare A (err) o dopo.
Questo articolo può essere di interesse http://blog.barrkel.com/ 2008/04/c-evaluation-order-gotcha.html –
Un altro post su questo: http://stackoverflow.com/questions/3054526/delphi-compiler-directive-to-evaluate-arguments-in-reverse –
@David, Ero a conoscenza di questa 'caratteristica' C e ho imparato su SO che Java e C# valutano da sinistra a destra, ma non riuscivo a ricordare dove Delphi ha documentato (e come abbiamo appreso, la documentazione è sbagliata). – gabr