我得到一个编译器警告我不明白:编译器为什么警告该变量可能未被初始化?
procedure Test;
var
Var1: Integer;
begin
while True do
begin
try
if System.Random > 0.5 then
begin
ShowMessage('Skipping');
continue; // If I remove this line, the warning goes away
end;
Var1:=6;
except on
E:Exception do
begin
ShowMessage('Error');
raise;
end;
end;
ShowMessage(IntToStr(Var1)); // Compiler warning on this line
end;
end;
当我在2010年德尔福编译这个我得到:
[DCC警告] OnlineClaimManagerMainU.pas(554):W1036变“VAR1” 可能尚未初始化
如果我删除调用“继续”,警告消失。
此外,如果我删除try/except子句(并保留继续),警告消失。
如果在没有初始化Var1的情况下执行到达问题行将如何执行?
编译器的分析是不深你的。不能确定Var1是否已经初始化。你知道Var1总是被初始化,但编译器没有你的分析天赋。 – 2012-07-19 06:12:38
请...我红着脸:-) – awmross 2012-07-19 06:17:47
所以...为什么去掉继续解决这个问题?同样的问题将适用。还是仅仅是两者结合的复杂性让编译器头脑发生了变化? – awmross 2012-07-19 06:21:19