给出以下未设置返回值的代码,返回什么?
Function MyFunction : Integer;
begin
end;
答案 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
参数给出。但是,这对于大多数程序员来说是非常违反直觉的,因此这不是一个好主意。