我在Delphi 5中创建了一些函数,偶然地,我尝试在不使用逗号分隔参数列表的情况下进行编译,奇怪的是,它完全正常工作。
我尝试按照以下步骤隔离问题:
program Project1;
{$APPTYPE CONSOLE}
procedure foo(i : integer; s : string; di : integer = -1);
begin
WriteLn(s);
end;
var
str: string;
int: integer;
begin
str := 'aaa';
int := 1000;
foo(int str int);
ReadLn;
end.
它可以编译,不会引发异常,并且参数表可以完全按预期达到功能。
我注意到的是,如果最后删除默认参数,它将开始引发编译错误Not enough actual parameters
为什么Delphi会有这种行为?是某种编译器错误还是怪异的机制?
答案 0 :(得分:5)
这似乎是一个编译器错误,至少在D2010或更早之前已得到修复。截至撰写本文时,Delphi 5已有20年历史,默认参数仅在D4中引入,因此可以断定某些早期问题已得到纠正。