線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:988
推到 Plurk!
推到 Facebook!

請問一個函式呼叫的問題

尚未結案
chenyuchih
一般會員


發表:4
回覆:3
積分:6
註冊:2009-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-03-17 23:16:06 IP:118.167.xxx.xxx 訂閱
各位前輩們好,
小弟在撰寫程式過程中有一疑問想請教:當一個函式的引數為另一函式的回傳值,
若直接以函式放入引數位置,有時會出現錯誤;
舉例而言:
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皆有此現象)
第一種寫法真的是屬於不良的寫作習慣嗎?
麻煩請有經驗或相關專業知識的前輩替小弟解惑一下,謝謝!
系統時間:2024-05-06 6:34:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!