क्या ऑर्डर जिसमें पैरामीटर की गणना किसी प्रक्रिया से पहले की जाती है जिसे डेल्फी में परिभाषित किया जाता है?डेल्फी में, किसी विधि में पारित होने पर पैरामीटर का मूल्यांकन किया जाता है?
IOW, अगर मैं इस बदसूरत कोड (कुछ इस तरह पाया एक विरासत आवेदन में) है ...
function A(var err: integer): integer;
begin
err := 42;
Result := 17;
end;
Test(A(err), err);
... टेस्ट मानकों (17, 42) प्राप्त करने की गारंटी दी है या यह भी कर सकता है हो (17, अपरिभाषित)?
संपादित करें:
हालांकि डेविड का उदाहरण 32-बिट और 64-बिट संकलक के साथ भिन्न परिणाम देता है, इस (सौभाग्य से) मेरी विरासत कोड को प्रभावित नहीं करता है क्योंकि टेस्ट (ए (गलती), अरे) रजिस्टर में 'गलती' के पते को स्टोर करता है और इससे कोई फर्क नहीं पड़ता कि संकलक ए (गलती) या उसके बाद कॉल करने से पहले करता है या नहीं।
यह लेख रुचि का हो सकता http://blog.barrkel.com/:
इस का एक दिलचस्प प्रदर्शन के रूप में, निम्नलिखित कार्यक्रम विभिन्न उत्पादन है कि क्या आप 32 या 64 बिट कोड को लक्षित के आधार पर किया गया है 2008/04/सी-मूल्यांकन-ऑर्डर-gotcha.html –
इसके बारे में एक और पोस्ट: http://stackoverflow.com/questions/3054526/delphi-compiler-directive-to-evaluate-arguments-in-reverse –
@ डेविड, मुझे इस सी 'फीचर' से अवगत था और मैंने एसओ पर सीखा कि जावा और सी # बाएं से दाएं से मूल्यांकन करते हैं लेकिन मुझे याद नहीं आया कि डेल्फी ने यह दस्तावेज कहाँ किया है (और जैसा कि हमने सीखा है, दस्तावेज गलत है)। – gabr