如果我编译下面的代码它给第1行的警告“未初始化变量”:分配给LTIME“价值从来没有使用过”变为
值从未使用*
但如果我删除了这一行,我坐上2号线不同的警告:
变量LTIME可能尚未初始化
编译器是否丢失了一些东西,或者我?
procedure TFormWebServices.RemoveOldReports;
var
TSR : TSearchRec;
I : Integer;
lCutOff,
lTime : Int64;
TSToDelete: TStringList;
S,Msg : String;
E : Exception;
begin
lCutOff := DelphiToJavaDateTime(Now - cDefReportLifeMins/1440);
I := FindFirst(FReportDir + '*.pdf',0,TSR);
TSToDelete := TStringList.Create;
while I = 0 do
begin
if (TSR.Attr and faDirectory) = 0 then
begin
lTime := lCutOff; // Line 1
try
lTime := StrToInt64(Copy(TSR.Name,1,pos('.',TSR.Name)-1));
except
on E:Exception do lTime := lCutOff;
end;
if lTime < lCutOff then // Line 2
TSToDelete.Add(TSR.Name);
end;
I := FindNext(TSR);
end;
这不是一个Why is the Compiler warning that variable may not be initialized?傻瓜,因为我在异常分配lTime
为好。
的可能的复制(HTTP://计算器。 com/questions/11554857/why-the-compiler-warning-that-variable-may-not-initialized) –
它看起来确实是重复的。 –
但是,真的,这里不需要使用异常处理。 RTL为此提供了一套'TryStrTo [x]'方法 - 比让异常处理程序处理它更有效。 [TryStrToInt64文档](http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.TryStrToInt64) –