如何解决Delphi try..finally退出版本10.1和10.2之间的行为更改
我维护一个必须在多个Delphi版本中运行的Delphi组件。 在最近的几个版本中,我注意到行为有所改变。
以下代码在Delphi 10.1中给出警告,并在Delphi 10.2中正常编译:
[dcc32警告] asdf.pas(1179):W1035函数“ TSomeClass.SomeFunc”的返回值可能未定义
function TSomeClass.SomeFunc(objc: TObject; const xD: array of string): integer;
var
s: string;
i: Integer;
begin
try
repeat
s := ReadLn;
// more code here
for i := 0 to High(xD) do
begin
if s = xD[i] then
begin
// Result := 0;
exit;
end;
end;
// more code here
until False;
finally
Result := 0;
end;
end;
以下代码在Delphi 10.2中给出了提示,并在Delphi 10.1中可以正常编译:
[dcc32提示] asdf.pas(1179):H2077从未分配给'TSomeClass.SomeFunc'的值
function TSomeClass.SomeFunc(objc: TObject; const xD: array of string): integer;
var
s: string;
i: Integer;
begin
try
repeat
s := ReadLn;
// more code here
for i := 0 to High(xD) do
begin
if s = xD[i] then
begin
Result := 0;
exit;
end;
end;
// more code here
until False;
finally
Result := 0;
end;
end;
这种行为发生了改变吗?
解决方法
编译器生成的代码的行为没有改变。您的代码将在所有版本的编译器中以相同的方式执行。
但是,提示和警告在10.1中是错误的。这些是由10.2修复的编译器错误。第一个示例不应生成警告W1035。第二个示例应生成提示H2077。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。