![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему warning?
Scott Storch © (2011-08-25 17:12:00)почему компилятор выдает warning - return value of function 'MyFunc' might be undefined? функция ведь однозначно вернет либо 0 либо -1, или я что-то недогоняю.
function MyFunc(): Integer;
var
ItemIdList: TStringList;
begin
try
ItemIdList := TStringList.Create;
try
raise Exception.Create('');
try
Result := 0;
except
raise;
end;
finally
ItemIdList.Free;
end;
except
on E: Exception do
begin
Result := -1;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage(IntToStr(MyFunc()));
end;
Игорь Шевченко (2011-08-25 18:22:00) [1]
> почему компилятор выдает warning
я бы убил за такой код
Jeer (2011-08-25 18:08:00) [2]
> Будет ли корректным вначале
всегда инициализировать Result
Scott Storch (2011-08-25 17:25:00) [3]в функции должна быть такая логика, что если возникла какая-либо ошибка - возвращается -1, если выполнилась успешно - возвращается 0. Будет ли корректным вначале проинициализировать Result := -1;
function MyFunc(): Integer;
var
ItemIdList: TStringList;
begin
Result := -1;
try
ItemIdList := TStringList.Create;
try
Result := 0;
finally
ItemIdList.Free;
end;
except
on E: Exception do
LastErrorMessage := E.Message;
end;
end;
Сергей М. (2011-08-25 17:24:00) [4]
> однозначно вернет либо 0 либо -1
Не вернет ни того ни другого, потому что
on E:Exception
эквивалентна
if E is Exception then
E теоретически может и не быть класса Exception и условие будет ложным
Inovet (2011-08-25 17:19:00) [5]> [0] Scott Storch (25.08.11 17:12)
> ведь однозначно вернет
Инициализируй result, в finally он может быть неопределён.
Scott Storch (2011-08-25 17:13:00) [6]raise Exception.Create(''); - это лишнее