Delphi “为什么?”;H2077分配给X的值“从未使用”;不是用字符串变量的occour?

Delphi “为什么?”;H2077分配给X的值“从未使用”;不是用字符串变量的occour?,delphi,compilation,compiler-warnings,delphi-xe7,delphi-2007,Delphi,Compilation,Compiler Warnings,Delphi Xe7,Delphi 2007,每次我分配一个变量而不使用它 var X : integer; begin X := 123; end; 在编译时,有一个提示帮助我说: [dcc32提示]单元1.pas(30):分配给“X”的H2077值从未使用过 不幸的是,如果未使用的变量是字符串,则不会出现这种情况 var X : string; begin X := 'hello'; end; 我在Delphi2007和Delphi XE7上复制了相同的行为,因此我认为这是一种预期的行为 为什么不为string变量发

每次我分配一个变量而不使用它

var
  X : integer;
begin
  X := 123;
end;
在编译时,有一个提示帮助我说:

[dcc32提示]单元1.pas(30):分配给“X”的H2077值从未使用过

不幸的是,如果未使用的变量是
字符串
,则不会出现这种情况

var
  X : string;
begin
  X := 'hello';
end;
我在Delphi2007和Delphi XE7上复制了相同的行为,因此我认为这是一种预期的行为


为什么不为
string
变量发出提示?

托管类型在分配和未使用时似乎不会发出提示

除此之外,启用优化时,赋值也不会像值类型一样被删除

为何不提出暗示,仍有待猜测。没有正当的理由不应该这样做



另请参见QP中的报告。

可能是因为变量实际使用了,只是不是在用户代码中,而是在编译器隐式生成的管理代码中。@RemyLebeau:我想你是对的。我怀疑这与string@Fabrizio有关,即使这是真的,编译器也没有理由不能检测到这种情况,并给出提示,甚至在启用优化时删除对未使用但已分配变量的处理。你也是对的。这可能是个错误,我的是关于原因的推测