这是较旧的程序员的问题。Pascal的任何方言是否允许可变数量的参数?
几年前,我遇到了一种帕斯卡方言,它通过某种扩展方式允许可变数量的参数。
有谁知道帕斯卡尔当前的方言,它允许可变数量的参数?
鉴于Pascal不像以前那么受欢迎,如果答案是否定的,我不会感到惊讶。
顺便说一句,这是更正确的,是不是,说了可变数量的参数,而不是参数?
这是较旧的程序员的问题。Pascal的任何方言是否允许可变数量的参数?
几年前,我遇到了一种帕斯卡方言,它通过某种扩展方式允许可变数量的参数。
有谁知道帕斯卡尔当前的方言,它允许可变数量的参数?
鉴于Pascal不像以前那么受欢迎,如果答案是否定的,我不会感到惊讶。
顺便说一句,这是更正确的,是不是,说了可变数量的参数,而不是参数?
不可以。答案是基于我用过的帕斯卡方言;其他人可能会不同。
原因是Pascal按顺序将参数压入堆栈帧,因此所有参数都是通过堆栈指针的固定偏移量访问的。 C通过比较以相反的顺序推入参数,所以定义的参数处于固定偏移量,并且可以通过指针算术访问“额外”参数。我会尝试一些ASCII艺术:
Pascal C
---------------------
| extra arg |
--------------------- ---------------------
| 1st param | | 3rd param |
--------------------- ---------------------
| 2nd param | | 2nd param |
--------------------- ---------------------
SP -> | 3rd param | | 1st param |
--------------------- ---------------------
至于参数与参数:我学过的函数(方法)定义了它的参数,调用者传递的参数。我相信这个定义来自Fortran手册,所以应该给你一个我多大的想法:-)
您可以使用可选的参数用delphi来获得同样的效果:
procedure Proc(const A: Integer; const B: Integer = 15);
Proc(10); // B = 15
Proc(20,30);
或者重载方法:
procedure Proc(const A: Integer); overload;
procedure Proc(const A,B: Integer); overload;
Proc(10); // Variant 1
Proc(20,30); // Variant 2
或者你也可以使用参数变量数组:
procedure Message(const AMessage: string; const AArgs: array of const);
Message('Hello %s', [Name]);
Message('%s %s', [Greeting, Name]);
GNU-Pascal(gcc based)afaik映射1:1到C的支持。使用函数something(arg:pchar; ...)like syntax
Delphi/Free Pascal具有“array of const”支持,这是一个类型安全的版本,以及用于C接口(D6或D7 +)的可变参数指令
你可能正在考虑一个可用于Turbo Pascal的库,他们有这样的黑客攻击。我的语法对于对象来说有点生锈,并且从它下降。
type
TValue = object;
TInteger = object(TValue)
Value : Integer;
end
TString = object(TValue)
Value : String;
end
TParam = record
Value : TValue;
Param : TParam;
end;
TValue = object;
{ Definition of Function }
function Test (Arg : TParam);
{ Usage }
var
I : TInteger;
S : TString;
Test (TParam (I, TParam (S, nil));
您可以根据需要链接尽可能多的参数。最后一个必须以零结尾。
是的,说更多的参数变量是正确的,函数只能有一个参数,它是一个变量列表的参数,通常作为最后一个参数 – 2009-09-22 12:33:23
我喜欢这种思考方式:'一个参数是一个可变的参数列表'+1(但你不是真的*够老*; -D) – pavium 2009-09-22 13:06:15