Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему 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(''); - это лишнее


Наверх

Титульная страница Поиск, карта сайта Написать письмо