Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Этого предупреждения не должно даваться, так как в функцию ObjectGetDouble передается ссылка и в операторе if проверяется истинность возвращаемых обоими вызовами, и следовательно только если обе функции вернули истину то производится работа с этими переменными, а значит обе эти переменные не могут быть не установлены в корректное значение.
Компилятор не настолько расширяет свое сознание, чтобы быть уверенным, что в результате выполнения вызова ObjectGetDouble эти переменные обязательно будут инициализированы. Попробуйте вместо нее написать свою, где явным образом будет задаваться значение для входного параметра, переданного по ссылке. Что скажет компилятор?
Рашид, это на самом деле совсем "не сознание", это математика.
Рашид, это на самом деле совсем "не сознание", это математика.
1. Есть такое понятие "укороченная оценка логических выражений"
2. Компилятор не может точно знать, будет ли заполнена переменная, переданная по ссылке.
3. Предупреждение на то и предупреждение, чтобы обратить ваше внимание на возможность появления проблемы.
Рашид, это на самом деле совсем "не сознание", это математика.
Ok, давайте определим такую фурнкцию
Есть тут гарантия, что переменная param будет проинициализирована?Ok, давайте определим такую фурнкцию
Есть тут гарантия, что переменная param будет проинициализирована?Это функция в которой результат "param" ТОЧНО НЕ меняется. Так что тут предупреждение должно выдаваться 1000% :)
Суть стандартного решения тут такая - если есть ветка выполнения кода где значение может быть не изменено, то считается что эта функция не меняет значение. И выдавать предупреждение.
Рашид, хотите я возьму любой из современных компиляторов С++ и С и откомпилирую подобный код, и я уверен что ни один не выдаст левого предупреждения.
Это явная не доработка, тем более если есть такие "проблемы" с детектированием таких вещей то вкрадывается БОЛЬШОЕ сомнение о том что оптимизации как таковой вообще нет. Или есть?
Рашид, хотите я возьму любой из современных компиляторов С++ и С и откомпилирую подобный код, и я уверен что ни один не выдаст левого предупреждения.
Об чём спорим? w0 не ставить
PS Сообщение обязательно будет (возможно несколькими строчками ниже)
Это явная не доработка, тем более если есть такие "проблемы" с детектированием таких вещей то вкрадывается БОЛЬШОЕ сомнение о том что оптимизации как таковой вообще нет. Или есть?
Если посмотреть справку на ObjectGetDouble:
Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.
Отсюда делаем вывод, что заполнение приемной переменной не гарантируется в случае той или иной ошибки. Поэтому сообщение компилятора правомерно.
ИМХО.
Что то все рассинхронизировалось в последнем билде.
Делаю маленький советник:
Запускаю тестер,
2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 Все нормально!
Вношу изменения в советник:
Компилирую, запускаю тестер - он отвечает:
2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 Все нормально!
Помогает только перезагрузка терминала.
Что то все рассинхронизировалось в последнем билде.
Делаю маленький советник:
Запускаю тестер,
2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 Все нормально!
Вношу изменения в советник:
Компилирую, запускаю тестер - он отвечает:
2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 Все нормально!
Помогает только перезагрузка терминала.