Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

ворнинг в функции   Найти похожие ветки 

 
Chik   (2006-01-12 11:14) [0]


...

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 может быть неопределенно, но почему?


 
Digitman ©   (2006-01-12 11:28) [1]


> почему?


потому что компилятору неведомы значения фактического параметра AValue, формируемого в ран-тайм


 
Chik   (2006-01-12 11:47) [2]


> потому что компилятору неведомы значения фактического параметра
> AValue, формируемого в ран-тайм

Непонятно, так как в той же справке по делфе, пишут, что если ворнинг в case, то нужно else присвоить result число, но зачем мне там присваивать если там ексепшн? какой в этом смысл?


 
Внук ©   (2006-01-12 11:49) [3]

Смысл в том, что функция должна вернуть определенное значение, а компилятору неведомо, что делает RaiseException


 
Jeer ©   (2006-01-12 11:49) [4]

Result := 0;
case AValue of
  1..3: Result := 5;
  else RaiseExeption("Unknow value");
end

Так не пробовал с учетом [1] ?


 
Chik   (2006-01-12 11:54) [5]


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

То ли им было влень дальше анализировать код, то ли я чего-то не понял :)


 
evvcom ©   (2006-01-12 12:06) [6]


> То ли им было влень дальше анализировать код

А если бы ты там супер-пупер вложенность организовал, им анализировать всевозможные извилины твоего хитроумного алгоритма?
Я обычно, если хочу сэкономить на не нужном по логике работы программы Result := 0, то пишу так
{$IFOPT R+} Result := 0; {$ENDIF}
Пока отлаживаюсь с RangeChecking = On warning-ов нет, а в билде этой строки уже не будет. Я то знаю, что она не нужна.


 
Юрий Зотов ©   (2006-01-12 12:39) [7]

Замените на raise Exeption.Create("Unknow value") и не будет никаких ворнингов.



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

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.057 c
2-1137171249
Guest386x
2006-01-13 19:54
2006.01.29
хук...


4-1132082130
АртемК
2005-11-15 22:15
2006.01.29
Отправить почту


3-1132936362
Mmmaloy
2005-11-25 19:32
2006.01.29
ADODataSet.DataSource или как сделать связь один-ко-многим


15-1136652047
Onlerton
2006-01-07 19:40
2006.01.29
проекты и программисты


3-1133338514
Stanislav
2005-11-30 11:15
2006.01.29
Подключение к MSSQLSERVER 2005 EXPRESS