Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
2-1137072542
pound
2006-01-12 16:29
2006.01.29
логотип


4-1132554832
ZSOmega
2005-11-21 09:33
2006.01.29
Как создать нового пользователя WinXP


1-1135081724
Умом Россию не понять
2005-12-20 15:28
2006.01.29
Редактор свойства


15-1136671037
Yeg
2006-01-08 00:57
2006.01.29
Программирование для КПК


2-1135793463
guitarist
2005-12-28 21:11
2006.01.29
Командная строка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский