最近我遇到了一个类似以下代码的例程:
procedure TMyForm.DoSomething(list: TList<TMyObject>; const flag: boolean);
var
local: integer;
begin
if flag then
//do something
else local := ExpensiveFunctionCallThatCalculatesSomething;
//do something else
for i := 0 to list.Count do
if flag then
//do something
else if list[i].IntValue > local then //WARNING HERE
//do something else
end;
即使通过阅读代码,你可以确定除非运行初始化它的分支,否则不会碰到该行,但是程序还是会提示Variable 'local' might not have been initialized
。
现在,我可以通过在过程顶部添加无用的local := 0;
来消除此警告,但我想知道是否有更好的结构方式来避免这个问题。有人有什么想法吗?
{$WARN USE_BEFORE_DEF OFF}
** - Ian Boyd