我得到一個編譯器警告我不明白:編譯器爲什麼警告該變量可能未被初始化?
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