![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| C4EBA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.4.2009 Репутация: нет Всего: 1 |
Добрый день!
Компилятор выдает 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 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 9 Всего: 58 |
Надо завершить if else с произвольным Result (каким оно может быть в остальных случаях), либо перед if поставить что-то типа Result := 0; |
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: нет Всего: 5 |
определи какое-нибудь дефолтное значение для результата, потому что компилятор не уверен, что в ходе выполнения программы выполнится какое-либо условие. например:
теперь варнинга нет. в общем-то уважаемый Keeper89 меня опередил Это сообщение отредактировал(а) 14SatanA88 - 6.9.2011, 11:00 |
|||
|
||||
| C4EBA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.4.2009 Репутация: нет Всего: 1 |
В первый if я ввел секцию else с произвольным, взятым "с потолка", значением в Result-е
Теперь варнинга нет. Попробовал вариант 14SatanA88. Также варнинга нет. И теперь вопрос по этим двум вариантам: это значение Result-а (12345 в первом случае, 0 - в варианте 14SatanA88) может стать значением функции, только если R_S не будет попадать ни в один из диапазонов, указанных в четырех if-ах (то есть будет меньше 0.1) ? |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 9 Всего: 58 |
Да. А еще лучше переделать все на else if, дабы видеть что это одна конструкция, а уже в конце поставить else. |
|||
|
||||
| C4EBA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.4.2009 Репутация: нет Всего: 1 |
14SatanA88: "...компилятор не уверен, что в ходе выполнения программы выполнится какое-либо условие...."
В начальном варианте функции это было действительно так: результат функции был определен только для значений от 0.1 до плюс бесконечности. Я добавил в код функции следующее: 1)
2) опять заменил ARvn/A_S на ARvn+A_S (исключил возможность деления на ноль). 3) опять заменил LN(R_S) на R_S (исключил возможность отрицательного числа в логарифме). Теперь результат функции определен для ВСЕХ значений от минус бесконечности до плюс бесконечности. Но варнинг все равно появляется. Выходит, не так уж и умен компилятор ;-) ------------ Спасибо за разъяснения, тему закрываю. Это сообщение отредактировал(а) C4EBA - 6.9.2011, 13:46 |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 9 Всего: 58 |
||||
|
||||
| C4EBA |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 13.4.2009 Репутация: нет Всего: 1 |
"...Потому что это должна быть одна конструкция, а ты не слышишь."
Да слышу я, слышу
Еще раз спасибо за ответы. |
|||
|
||||
| rodnover |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 7.4.2009 Репутация: 1 Всего: 10 |
А лучше в else Exception бросать, чтобы, если, вдруг, диапазон, всё-таки, не полный заметить это сразу.
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
Добавлено через 5 минут и 54 секунды совершенно лишнее, потому что в случае исключения твоя функция ничего не вернёт правда, чтоли? -------------------- Обижено школьников: 8 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |