为什么在Delphi中不用逗号分隔参数就可以调用函数?

时间:2019-03-01 15:09:33

标签: delphi delphi-5

我在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会有这种行为?是某种编译器错误还是怪异的机制?

1 个答案:

答案 0 :(得分:5)

这似乎是一个编译器错误,至少在D2010或更早之前已得到修复。截至撰写本文时,Delphi 5已有20年历史,默认参数仅在D4中引入,因此可以断定某些早期问题已得到纠正。