来自 Delphi 函数(或 Pascal)的默认 return 值

Default return value from a Delphi function (or Pascal)

给定以下未设置 return 值的代码,returned 是什么?

Function MyFunction : Integer;  
begin  
end;

返回值未定义;它可以是任何东西。

因此,这是一个错误。1, 2

事实上,编译器会警告您:

[dcc32 Warning]: W1035 Return value of function 'MyFunction' might be undefined.


1 我认为这是显而易见的,但显然不是:我的意思是当函数没有设置 Result 变量时这是一个错误。因此,如果 Delphi 程序员编写的函数在某些情况下无法为 Result 赋值,那么该程序员就犯了一个错误,应该尽快修复它。我没有不是意味着Delphi语言或Delphi编译器中存在错误。

2 好吧,它 不一定 是一个错误,但几乎总是 - 至少在正常的代码中。例外情况是函数的契约明确指出返回值在某些特定且可测试的条件下未定义。例如,我们都知道 TryXToY 成语,例如 TryStrToInt(const S: string; out Val: Integer): Boolean。如果可以转换,则分配函数 returns TrueVal。如果不是,函数 returns FalseVal 很可能未定义。理论上,您可以编写一个具有相反行为的函数,其中结果的 "definedness" 由 out 参数给出。然而,这对大多数程序员来说是非常违反直觉的,所以这不是一个好主意。