請問一個函式呼叫的問題 |
尚未結案
|
chenyuchih
一般會員 發表:4 回覆:3 積分:6 註冊:2009-10-04 發送簡訊給我 |
各位前輩們好,
小弟在撰寫程式過程中有一疑問想請教:當一個函式的引數為另一函式的回傳值, 若直接以函式放入引數位置,有時會出現錯誤; 舉例而言: Function A(a1,a2:Integer):Double; begin ....(中略)... end; Function B(b1:String):Double; begin ....(中略)... end; Function C(c1,c2:Double):Double; begin ....(中略)... end; 在使用這些函式時,若是用 D:=C(A(a1,a2),B(b1)); 有時候(不一定發生,也不知什麼時候會發生)會出現錯誤而直接讓程式關閉 (連錯誤訊息的對話框都沒有) 若是改成 TMPDbl:=A(a1,a2); TMPDbl2:=B(b1); D:=C(TMPDbl,TMPDbl2); 則不會有問題。 原先都用前者寫(因為兩種寫法的程式碼行數差異不小), 後來因為遇到程式不穩定的問題(尤其A,B,C函式是從DLL呼叫來的時候此現象會較為頻繁),才發現用後者的寫法相對安全。 請問是什麼原因有可能造成這樣子的錯誤產生? (我不確定其他語言編譯器有沒有類似情況,但Delphi 7/FreePascal 2.2.4皆有此現象) 第一種寫法真的是屬於不良的寫作習慣嗎? 麻煩請有經驗或相關專業知識的前輩替小弟解惑一下,謝謝! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |