Вниз
Скачать: CL | DM;

Почему warning?   Найти похожие ветки 

← →
Scott Storch   (2011-08-25 17:12) [0]

почему компилятор выдает 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;


← →
Scott Storch   (2011-08-25 17:13) [1]

raise Exception.Create(""); - это лишнее


← →
Inovet ©   (2011-08-25 17:19) [2]

> [0] Scott Storch   (25.08.11 17:12)
> ведь однозначно вернет

Инициализируй result, в finally он может быть неопределён.


← →
Сергей М. ©   (2011-08-25 17:24) [3]


> однозначно вернет либо 0 либо -1


Не вернет ни того ни другого, потому что
on E:Exception
эквивалентна
if E is Exception then

E теоретически может и не быть класса Exception и условие будет ложным


← →
Scott Storch   (2011-08-25 17:25) [4]

в функции должна быть такая логика, что если возникла какая-либо ошибка - возвращается -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;


← →
Jeer ©   (2011-08-25 18:08) [5]


> Будет ли корректным вначале


всегда инициализировать Result


← →
Игорь Шевченко ©   (2011-08-25 18:22) [6]


> почему компилятор выдает warning


я бы убил за такой код



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.006 c
15-1313958600
Юрий
2011-08-22 00:30
2011.12.11
С днем рождения ! 22 августа 2011 понедельник


15-1313419636
serhioli
2011-08-15 18:47
2011.12.11
Визуальное программирование


1-1276780601
Timer Writer
2010-06-17 17:16
2011.12.11
Перекрытие абстрактного метода в наследнике


2-1314620080
guesto
2011-08-29 16:14
2011.12.11
chr(39), #39, QuotedStr( / );


15-1313675656
Andy BitOff
2011-08-18 17:54
2011.12.11
Протокол обмена с весами CAS AD-25




   Наверх