下面的代码来自DDetours.pas。当它编译为32位时,不会发出任何警告。当它编译为64位时,它发出此警告:(Delphi Berlin Update 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习惯于启用提示和警告的编译器,因为他们的库代码中充满了提示和警告。
无论如何,在这种情况下,编译器会看到对变量的两次写入,但由于某种原因无法识别出变量的中间读取。
您无能为力。您可以提交错误报告。我希望您不想更改代码,因为它是第三方代码。如果不进行更改,则必须忍受虚假提示。
通知库的作者可能会允许他们解决此问题。也许通过抑制该功能的提示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句