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 中的其他数值,测试结果是否一致。