为什么我可以在 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 中引入,因此有一些早期问题已得到纠正是理所当然的。
我在 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 中引入,因此有一些早期问题已得到纠正是理所当然的。