我经常使用以下代码:
function GetNumber(Handle : THandle) : Integer;
begin
FLock.BeginRead;
try
if FMap.TryGetValue(Handle, Object) then
raise EArgumentException.Create('Invalid handle');
Result := Object.Number;
finally
FLock.EndRead;
end;
end;
很不幸,编译器对所有这些方法都发出了警告:
[DCC Warning] Unit.pas(1012): W1035 Return value of function 'GetNumber' might be undefined
我知道这个警告,但在这种情况下我完全看不出任何原因。或者是否有一种场景我没有察觉到,会导致返回一个未定义的结果值?我理解在 try..except
的情况下发出警告,但是对于 try..finally
对我来说就没有意义。问题:
- 这个警告是否有任何原因?
- 如何摆脱它(将
Result := Object.Number
行移出锁定不是一个选项,并且我想避免在每个函数的顶部编写完全不必要的Result := 0
行)?
Result := X; // 避免编译器警告
,其中一些是由于编译器版本之间的更改而有条件地编译的。Embarcadero 应该修复这个错误,因为它很烦人! - Cosmin Prund