[問題] 請問一個函式呼叫的問題

看板Programming作者 (昱)時間14年前 (2011/03/14 19:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
各位前輩們好, 小弟在撰寫程式過程中有一疑問想請教:當一個函式的引數為另一函式的回傳值, 若直接以函式放入引數位置,有時會出現錯誤; 舉例而言:(小弟慣用Delphi/FreePascal,故以下用Pascal語法表示) 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); 則不會有問題。 原先都用前者寫(因為兩種寫法的程式碼行數差異不小), 後來因為遇到程式不穩定的問題,才發現用後者的寫法相對安全。 請問是什麼原因有可能造成這樣子的錯誤產生? (我不確定其他語言編譯器有沒有類似情況,但Delphi 7/FreePascal 2.2.4皆有此現象) 第一種寫法真的是屬於不良的寫作習慣嗎? 麻煩請有經驗或相關專業知識的前輩替小弟解惑一下,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.101.245
文章代碼(AID): #1DVW3Y0J (Programming)
文章代碼(AID): #1DVW3Y0J (Programming)