![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
try .. finally внутри try .. except
Nucer © (2012-01-24 16:22:00)Код:
procedure MyProc;
begin
try
...
Obj := TObj.Create;
try
...
Value := ...;
...
finally
Obj.Free;
end;
if Value then ...;
...
except
...
end;
end;
Delphi 7 предупреждает об ошибке:
[Warning] Unit1.pas(438): Variable 'Value' might not have been initialized
Ошибка среды? Или я что-то делаю не так?
Ega23 (2012-01-24 16:46:00) [21]
> Вот реальный пример (можно скопировать в IDE и увидеть предупреждение):
Буратино дали 3 яблока. 2 яблока он съел. Сколько яблок осталось у Буратино?
Nucer (2012-01-24 16:42:00) [22]Вот реальный пример (можно скопировать в IDE и увидеть предупреждение):
procedure Test;
var
Obj: TStringList;
Value: Integer;
begin
try
Obj := TStringList.Create;
try
if Random(10) = 0 then raise Exception.Create('Error!');
Value := Obj.Count;
finally
Obj.Free;
end;
if Value > 0 then Sleep(1000);
except
MessageBox(0, 'Error!', 'Error!', 0);
end;
end;
Nucer (2012-01-24 16:38:00) [23]Прошу прощения за неточность(по примеру кода этого не видно), но переменная локальная.
sniknik (2012-01-24 16:35:00) [24]глобальная переменная... откуда знать что после этой процедуры другая ее не использует?
Nucer (2012-01-24 16:30:00) [25]Но ведь если значение не будет присвоено, то и до проверки значения дело не дойдет?
MBo (2012-01-24 16:27:00) [26]Это не ошибка, а предупреждение, ведь Value действительно не всегда будет присвоено значение.