gpt4 book ai didi

delphi - Exception.RaiseOuterException 与 W1035 函数 '%s' 的返回值可能未定义

转载 作者:行者123 更新时间:2023-12-03 14:31:33 27 4
gpt4 key购买 nike

这已被报告为 RSP-25603: "Exception.RaiseOuterException can cause wrong W1035 warning" .

给定以下(演示)函数F ,我已将异常引发语句更改为现在链异常:

--- before
+++ after
@@ -1,11 +1,11 @@
function F(X: NativeInt): NativeInt;
begin
try
Result := 1 div X;
except
on EDivByZero do
- {ECustom}Exception.Create('...');
+ Exception.RaiseOuterException({ECustom}Exception.Create('...'));
else
raise;
end;
end;
现在, Ctrl-F9发出警告 W1035 :

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


但是,所有情况都会处理。编译器无法识别 Exception.RaiseOuterException作为 raise操作它。
不幸的是 FAcquireInnerException: BooleanException 是私有(private)的类,甚至不能设置为 True在我可以继续直接提升的派生自定义类中( raise ECustomException.Create)。
有什么方法可以让编译器理解,同时保持异常链接?否则我可以想到 {$Warn No_RetVal Off} .我还能如何解决此警告?

最佳答案

我能想到的一种避免警告而不禁用警告的方法是改为执行以下操作:

function F(X: NativeInt): NativeInt;
begin
try
Result := 1 div X;
except
on E: Exception do
begin
if E is EDivByZero then
Exception.RaiseOuterException({ECustom}Exception.Create('...'));
raise;
end;
end;
end;
更新:如评论中所述,另一种方法是简单地定义一个在运行时实际未达到的返回值,例如:
function F(X: NativeInt): NativeInt;
begin
try
Result := 1 div X;
except
on E: EDivByZero do
begin
Exception.RaiseOuterException({ECustom}Exception.Create('...'));
Result := 0; // <-- just to keep the compiler happy
end;
end;
end;

关于delphi - Exception.RaiseOuterException 与 W1035 函数 '%s' 的返回值可能未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64834857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com