Delphi过程与函数的调用约定
过程与函数的调用约定
在调用过程或函数的时候,如果参数列表中具有多个参数,那么参数传递给过程或函数的顺序会对结果产生一定的影响。对于不同的语言,参数传递的顺序是不同的:Pascal 语言是按照从左向右的顺序进行传递的,而C 语言是按照从右向左的顺序来传递的。为了确定传递的顺序,可以在过程或函数定义的时候,在Directives 部分利用指令字指定传递的顺序。
来自Delphi 的联机帮助的数据,如表4-13 所示,其中列举了Directives 部分可使用的关于函数调用约定的指令字。
定义过程与函数时对调用约定起作用的指令字
·Register:从左向右
·Pascal:从左向右
·Stdcall:从右向左
·safecall:从右向左
·Cdecl:从右向左
可以通过下面的例子查看参数传递的顺序:
program Project1;
{$APPTYPE CONSOLE}
function P1:Integer; //该函数将作为GetMax 函数的第1 个参数
begin
Writeln(’P1’);
Result:=0;
end;
function P2:Integer; //该函数将作为GetMax 函数的第2 个参数
begin
Writeln(’P2 ’) ;
Result:=1;
end;
//参数的传递方式采用pascal 方式
function GetMax(N1:Integer; N2:Integer):Integer;pascal;
begin
Result:=N1+N2;
end;
begin
GetMax(P1,P2);
end. 运行结果如下:
P1
P2 如果将GetMax 函数定义处的Directives 部分由Pascal 改为Stdcall,则运行结果变为:
P2
P1 用户可以修改GetMax 函数定义处的Directives 部分为表4-9 中的其他数值,测试结果是否一致。