Главная страница
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.037 c
2-1136886694
Term
2006-01-10 12:51
2006.01.29
Округление


1-1135767790
ASMiD
2005-12-28 14:03
2006.01.29
Экспорт данных в Excel


15-1136356025
begin...end
2006-01-04 09:27
2006.01.29
С Днём рождения! 4 января


2-1137154219
SarDoX
2006-01-13 15:10
2006.01.29
Запись в файл


2-1136810258
BiggieSmalls
2006-01-09 15:37
2006.01.29
И еще немного реестра