Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ворнинг в функции [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, формируемого в ран-тайм


Наверх

Титульная страница Поиск, карта сайта Написать письмо