Delphi 函数(或 Pascal)的默认返回值

Joh*_*ore 3 delphi pascal

鉴于以下代码未设置返回值,返回什么?

Function MyFunction : Integer;  
begin  
end;
Run Code Online (Sandbox Code Playgroud)

And*_*and 8

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

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

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

[dcc32 警告]:W1035 函数“MyFunction”的返回值可能未定义。


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

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