为什么我可以在 Delphi 中调用没有逗号分隔参数的函数?

Why can I call a function without comma separating the parameters in Delphi?

我在 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 在撰写本文时已有 20 年的历史,默认参数仅在 D4 中引入,因此有一些早期问题已得到纠正是理所当然的。