作者yuchih0519 (昱)
看板Programming
标题[问题] 请问一个函式呼叫的问题
时间Mon Mar 14 19:49:51 2011
各位前辈们好,
小弟在撰写程式过程中有一疑问想请教:当一个函式的引数为另一函式的回传值,
若直接以函式放入引数位置,有时会出现错误;
举例而言:(小弟惯用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