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

时间:2019-12-19 21:04:29

标签: delphi pascal

给出以下未设置返回值的代码,返回什么?

Function MyFunction : Integer;  
begin  
end;

1 个答案:

答案 0 :(得分: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参数给出。但是,这对于大多数程序员来说是非常违反直觉的,因此这不是一个好主意。