| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Возвращаемое значение функции |
| Автор: C4EBA 6.9.2011, 10:50 | ||
Добрый день!
Компилятор выдает Warning: ...W1035 Return value of function 'Kns' might be undefined которое я понял как "Возвращаемое значение функции 'Kns' может быть неопределеным". Постарался исключить неопределенность (так, как я ее понимаю): - заменил ARvn/A_S на ARvn+A_S (исключил возможность деления на ноль). Не помогло. Вернулся к исходному коду - заменил LN(R_S) на R_S (исключил возможность отрицательного числа в логарифме). Не помогло. Вернулся к исходному коду - убрал все if-ы, кроме первого, и дополнил его else, куда вписал произвольный Result. Компилятор "успокоился". Но понятно, что в таком виде функция не выполняет свою задачу Вопрос: как должен выглядеть код функции, чтобы не было Warning? Среда разработки - Delphi XE. |
| Автор: Keeper89 6.9.2011, 10:54 |
Надо завершить if else с произвольным Result (каким оно может быть в остальных случаях), либо перед if поставить что-то типа Result := 0; |
| Автор: 14SatanA88 6.9.2011, 10:58 | ||
определи какое-нибудь дефолтное значение для результата, потому что компилятор не уверен, что в ходе выполнения программы выполнится какое-либо условие. например:
теперь варнинга нет. в общем-то уважаемый Keeper89 меня опередил |
| Автор: C4EBA 6.9.2011, 11:32 | ||
В первый if я ввел секцию else с произвольным, взятым "с потолка", значением в Result-е
Теперь варнинга нет. Попробовал вариант 14SatanA88. Также варнинга нет. И теперь вопрос по этим двум вариантам: это значение Result-а (12345 в первом случае, 0 - в варианте 14SatanA88) может стать значением функции, только если R_S не будет попадать ни в один из диапазонов, указанных в четырех if-ах (то есть будет меньше 0.1) ? |
| Автор: C4EBA 6.9.2011, 11:58 | ||
| 14SatanA88: "...компилятор не уверен, что в ходе выполнения программы выполнится какое-либо условие...." В начальном варианте функции это было действительно так: результат функции был определен только для значений от 0.1 до плюс бесконечности. Я добавил в код функции следующее: 1)
2) опять заменил ARvn/A_S на ARvn+A_S (исключил возможность деления на ноль). 3) опять заменил LN(R_S) на R_S (исключил возможность отрицательного числа в логарифме). Теперь результат функции определен для ВСЕХ значений от минус бесконечности до плюс бесконечности. Но варнинг все равно появляется. Выходит, не так уж и умен компилятор ;-) ------------ Спасибо за разъяснения, тему закрываю. |
| Автор: Keeper89 6.9.2011, 14:17 | ||
Потому что это должна быть одна конструкция, а ты не слышишь. |
| Автор: C4EBA 6.9.2011, 15:51 | ||
| "...Потому что это должна быть одна конструкция, а ты не слышишь." Да слышу я, слышу
Еще раз спасибо за ответы. |
| Автор: rodnover 6.9.2011, 15:57 |
| А лучше в else Exception бросать, чтобы, если, вдруг, диапазон, всё-таки, не полный заметить это сразу. |
| Автор: bems 6.9.2011, 16:33 | ||||
Добавлено через 5 минут и 54 секунды
совершенно лишнее, потому что в случае исключения твоя функция ничего не вернёт правда, чтоли? |