[問題] 請問一個函式呼叫的問題
各位前輩們好,
小弟在撰寫程式過程中有一疑問想請教:當一個函式的引數為另一函式的回傳值,
若直接以函式放入引數位置,有時會出現錯誤;
舉例而言:(小弟慣用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
Programming 近期熱門文章
PTT數位生活區 即時熱門文章