Delphi - 分配给 'x' 的值从未使用过

标签 delphi compiler-warnings

假设我有以下代码:

function DoSomething:Boolean;
var obj : TMyObject;
i : Integer;
begin
  Result := False; //We haven't executed GetValue() correctly yet
  obj := TMyObject.Create();
  try
    //perform some code that may produce an exception        
    i := obj.GetValue();
    //Set the return to True as we executed GetValue() successfully
    Result := True;
  finally
    //do some cleanup
    obj.Free; 
  end;
end;

Delphi 编译器提示分配给 Result 的值从未在第一行中使用过。

我可能遗漏了一些明显的东西,但我不明白为什么编译器会优化它(如果优化打开)。

我一直被教导要显式设置变量,以免混淆它们的值。最重要的是,如果 GetValue() 函数生成异常,Result := True; 行将永远不会执行。因此,我们受 Delphi 初始化变量的影响。

那么这个代码安全/可接受吗?我是否应该简单地删除该方法的第一行,这会使它更难以阅读?如果做不到这一点,我将不得不关闭特定的编译器警告,但我不愿意这样做,因为此警告消息可以提供有用的信息。

最佳答案

编译器是正确的。将 False 分配给 Result 是徒劳的,您的函数可以返回的唯一值是 True。

两种可能的执行路径是:

  1. 该函数不会引发异常并返回 True。
  2. 该函数确实引发了异常,因此根本不返回结果值。

解决方案很简单,删除将 Result 设置为 False 的代码行。此时就完全清楚返回值没有任何作用,您可以简单地将函数转换为过程。

关于Delphi - 分配给 'x' 的值从未使用过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11008714/

相关文章:

delphi - Delphi Prism 中 CharInSet 函数的替换

c++ - 当外部变量在其他文件中声明不同时,如何使 g++ 生成警告?

delphi - ZLib 解压包含多个文件的 zip

image - Delphi XE5 Firemonkey - 如何使图像背景透明运行时?

arrays - 用 TArray<XXX> 替换 XXX 数组是否安全

performance - 仅在 I/O 负载较低时运行线程

scala - 如何避免 'Non-variable type argument is unchecked since it is eliminated by erasure' ?

objective-c - 为什么我必须选派代表?

c - 从不兼容的指针类型 struct c 赋值

swift - for 语句中的奇怪行为 (swift)