|
发表于 2011-1-10 14:16:47
|
显示全部楼层
过程没返回值,函数有返回值;主作用是按你想的调用序列求值,副作用是嵌套调用时求值顺序未定义。举例:
function addOne(var x:integer,var y:integer):integer;
begin
inc(x);
inc(y);
addOne:=x+y;
end;
function addTwo(var x:integer,var y:integer):integer;
begin
x:=x+2;
y:=y+2;
addTwo:=x+y;
end;
var
a:integer;
b:integer;
retval:integer;
begin
a:=10;
b:=11;
retval:=addOne(addTwo(a,b),addOne(b,a));
中间a和b 求值时间和顺序是系统未定义的。所以不同系统retval应该不同(54 或者53)。安全的作法是分开两步求值:
...
var
...
r1:integer;
r2:integer;
..
r1:=addTwo(a,b);
r2:=addOne(b,a);
retval:=addOne(r1,r2);
免责声明:以上代码未经测试,完全凭个人理解,对使用该代码所造成的任何损失,如硬盘被格式化,让你的Win7变成了Ubuntu,网银密码被盗,丢失女朋友等,本人概不负责。 |
|