Главная страница
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.065 c
2-1136932525
Arazel
2006-01-11 01:35
2006.01.29
(DiskSize-DiskFree) > на Char (Не чего не получается :( )


15-1136372892
ArtemESC
2006-01-04 14:08
2006.01.29
Internet Explorer


6-1129475109
Klopan
2005-10-16 19:05
2006.01.29
узнать какая ОС стоит на удаленном IP


1-1135170380
SiJack
2005-12-21 16:06
2006.01.29
Определить компонент на котором расположен др компонент


2-1136991534
ROOT
2006-01-11 17:58
2006.01.29
Неработает ApplyUpdates(-1);