加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何摆脱`continue`混淆的编译器警告?

发布时间:2020-12-15 09:35:13 所属栏目:大数据 来源:网络整理
导读:参见英文答案 Why is the Compiler warning that variable may not be initialized?????????????????????????????????????3个 编译器向我显示以下代码的以下警告: Warning: W1036 Variable 'Address' might not have been initialized 代码(基于实际代码的M
参见英文答案 > Why is the Compiler warning that variable may not be initialized?????????????????????????????????????3个
编译器向我显示以下代码的以下警告:

Warning: W1036 Variable 'Address' might not have been initialized

代码(基于实际代码的MVCE代码段):

function DoFoo(): Integer;
var
  i: Integer;
  Address,Bar: Cardinal;
begin
  for i := 1 to 5 do
  begin
    try
      Address := Hex2CardPos(IntToStr(i));
    except on EConvertError do
      continue;
    end;
    Bar := Address + 42;  // "Warning: Address might not have been initialized"
  end;
  Result := 42;
end;

如您所见,地址是:

>分配给Hex2CardPos的结果()
> Hex2CardPos()抛出错误,并立即跳过循环迭代.

我试图通过添加一个无用的地址来解决这个问题:= 0;到循环的开头,但然后警告只是替换为另一个:

Hint: H2077 Value assigned to 'Address' never used.

这是编译器错误还是警告有实质内容?

解决方法

问题出在您的代码中. “bar”赋值必须在try except块中,因为当发生异常时你不想指定“Bar”

function DoFoo(): Integer;
var
  i: Integer;
  Address,Bar: Cardinal;
begin
  for i := 1 to 5 do
  begin
    try
      Address := Hex2CardPos(IntToStr(i));
      Bar := Address + 42;
    except on EConvertError do
      continue;
    end;
  end;
  Result := 42;
end;

顺便说一句,这段代码有一个“H2077值分配给’Bar’从未使用过”,这是正确的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读