![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ворнинг в функции [D6, WinXP]
Chik © (2006-01-12 11:14:00)
...
function DoSomesing(const AValue: Integer): Integer;
begin
case AValue of
1..3: Result := 5;
else RaiseExeption('Unknow value');
end
end;
procedure RaiseExeption(const AErrorMessage: String);
begin
raise Exception.Create(AErrorMessage);
end;
...
При компиляции ругается что значение Result может быть неопределенно, но почему?
Юрий Зотов (2006-01-12 12:39:00) [1]Замените на raise Exeption.Create('Unknow value') и не будет никаких ворнингов.
evvcom (2006-01-12 12:06:00) [2]
> То ли им было влень дальше анализировать код
А если бы ты там супер-пупер вложенность организовал, им анализировать всевозможные извилины твоего хитроумного алгоритма?
Я обычно, если хочу сэкономить на не нужном по логике работы программы Result := 0, то пишу так
{$IFOPT R+} Result := 0; {$ENDIF}
Пока отлаживаюсь с RangeChecking = On warning-ов нет, а в билде этой строки уже не будет. Я то знаю, что она не нужна.
Chik (2006-01-12 11:54:00) [3]
> Смысл в том, что функция должна вернуть определенное значение,
> а компилятору неведомо, что делает RaiseException
Как это неведомо ? А посмотреть? :)
Пока сделал так:
function DoSomesing(const AValue: Integer): Integer;
begin
case AValue of
1..3: Result := 5;
else
begin
Result := 0;
RaiseExeption('Unknow value');
end;
end
end;
То ли им было влень дальше анализировать код, то ли я чего-то не понял :)
Внук (2006-01-12 11:49:00) [4]Смысл в том, что функция должна вернуть определенное значение, а компилятору неведомо, что делает RaiseException
Jeer (2006-01-12 11:49:00) [5]Result := 0;
case AValue of
1..3: Result := 5;
else RaiseExeption('Unknow value');
end
Так не пробовал с учетом [1] ?
Chik (2006-01-12 11:47:00) [6]
> потому что компилятору неведомы значения фактического параметра
> AValue, формируемого в ран-тайм
Непонятно, так как в той же справке по делфе, пишут, что если ворнинг в case, то нужно else присвоить result число, но зачем мне там присваивать если там ексепшн? какой в этом смысл?
Digitman (2006-01-12 11:28:00) [7]
> почему?
потому что компилятору неведомы значения фактического параметра AValue, формируемого в ран-тайм