我在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有这种行为?这是某种编译器错误还是奇怪的机制呢?
这似乎是一个编译器错误,至少自D2010以来可能已经修复过。截至本文撰写时,Delphi 5已有二十年的历史,默认参数仅在D4中引入,因此有一些早期问题已被纠正。