delphi - 为什么 dcc64 说这个值从未被使用过?

标签 delphi 64-bit

下面的代码来自DDetours.pas。当它编译为 32 位时,不会发出任何警告。当它编译 64 位时,它会发出以下警告:(Delphi Berlin 更新 2)

[dcc64 Hint] DDetours.pas(1019): H2077 Value assigned to 'Prf' never used

这是有问题的函数

function GetPrefixesCount(Prefixes: WORD): Byte;

var
  Prf: WORD;
  i: Byte;
begin
  { Get prefixes count used by the instruction. }
  Result := 0;
  if Prefixes = 0 then
    Exit;

  Prf := 0;
  i := 0;
  Prefixes := Prefixes and not Prf_VEX;
  while Prf < $8000 do
  begin
    Prf := (1 shl i);
    if (Prf and Prefixes = Prf) then
      Inc(Result);
    Inc(i);
  end;
end;

在我看来,这确实像是第一次将 Prf 与使用初始值的 8000 美元进行比较。

最佳答案

这是一个编译器错误。这种性质的也有一些。相当令人沮丧。有时 32 位编译器会以不合理的方式提示,然后当您解决方法时,64 位编译器又会以不合理的方式提示您的解决方法。

我不认为 Embarcadero 习惯性地启用提示和警告编译器,因为他们的库代码充满了提示和警告。

无论如何,在这种情况下,编译器会看到对变量的两次写入,但由于某种原因无法识别变量的中间读取。

您无能为力。您可以提交错误报告。我希望您不想更改代码,因为它是第三方代码。如果你不改变它,那么你将不得不忍受虚假的提示。

通知库的作者可能会让他们解决该问题。也许是通过抑制该功能的提示。

关于delphi - 为什么 dcc64 说这个值从未被使用过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730610/

相关文章:

delphi - TParallel 的奇怪行为。对于默认线程池

mysql - 为什么会出现列表索引越界 (1) 错误?

asp.net-ajax - 奇怪的 ASP.NET AJAX Bug/32 位到 64 位

64-bit - 无法在Win 7 Prof上以64位模式运行CMD

windows - Delphi FMX TMainMenu 第一个菜单项在 OSX 中不显示,在 WIndows 中正常

用于编辑键/值对的 Delphi 控件?

delphi - 内河码头 RAD 工作室 : How to dock component palette

python - 为什么 reversed(mylist) 这么慢?

visual-studio-2008 - 检索 COM 类工厂失败。错误 : 80040154

c++ - 将位解压缩为单精度 float 的最快方法