![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему «Return value must be undefined»?
И. Павел © (2011-12-12 10:10:00)Вроде бы функция линейная. Единственное может прерваться выполнение сгенерированным исключением. Но перехвата исключения в функции нет. Т.е. в любом случае выполнение либо дойдет до end, и тогда result := не удастся миновать, либо возникнет исключение и тогда уже не важно, возвращает функция что-то или нет. Но при проверке кода Delpgi XE выдает warning...
function TSEDDeloMonitoringYITService.GetLastHDMes: TDateTime;
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if not Reg.OpenKey('SOFTWARE\YITMonitoring', False) then
raise Exception.Create('Не удалось открыть раздел реестра «HKEY_LOCAL_MACHINE\SOFTWARE\YITMonitoring»');
result := Reg.ReadInteger('day') + Reg.ReadInteger('sec') / 60 / 60 / 24;
Reg.CloseKey;
finally
Reg.Free;
end;
end;
И. Павел (2011-12-12 10:28:00) [21]В Delphi 7 то де самое > В Delphi 7 то же самое
И. Павел (2011-12-12 10:28:00) [22]В Delphi 7 то де самое.
Но вот этот блок пропускается нормально:
function TForm1.GetLastHDMes: TDateTime;
begin
result := 1;
if Now = 1 then raise Exception.Create('123');
end;
Если обернуть в try/except то warning выдается, как и ожидалось.
И. Павел (2011-12-12 10:23:00) [23]> [1] Медвежонок Пятачок © (12.12.11 10:18)
> Оно говорит, что при определнных фазах венеры результат
> не получит никакого значения
Это я понимаю. Но при каких фазах?
Если бы вместо finally стоял except то было бы ясно.
Похоже, все дело в raise. Если его удалить, warning исчезает. Но какая разница, задал ли я result, если в функции сгенерировалось исключение?
> [2] Anatoly Podgoretsky © (12.12.11 10:20)
Что оно?
Anatoly Podgoretsky (2011-12-12 10:20:00) [24]Вот оно
Медвежонок Пятачок (2011-12-12 10:18:00) [25]Оно говорит, что при определнных фазах венеры результат не получит никакого значения