Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 156
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1) почему бы инициализацию не провести сразу при объявлении int err=0 ?
2) не проверял, но как пишет документация ошибка хранится в некой переменой, которая автообнуляется при использовании функции GetLastError(),
а также всегда изменяется при использовании некоторых функций (в основном терминаловских)
3) вот почему GetLastError() давал значение 0 после обращения к несуществующему номеру тикета в OrderSelect:
" Остальные функции не меняют значение переменной last_error ни при каких условиях. ................., OrderSelect, ...................."
Часто я внутри функций объявлял переменную типа так:
Дальше внутри, при каком-то условии уже вызываю её, чтобы увидеть, если есть ошибка. Ну это не только у меня, а и много где, в кодах, которые мне попадались. Так сказать, типичная ситуация. Сегодня я подумал, что не логично каждый раз, в каждой функции, где требуется контролировать ошибки, объявлять ту же самую переменную. Подумал, пришёл к выводу, что проще будет один раз объявить глобально и инициализировать её в ините. Как-то так:
А дальше, когда нужно в пользовательских функциях вызывать переменную err, зная, что у неё уже есть значение. По сути, GetLastError() выдаёт код последней ошибки, а значит, если в каждой функции будет вызываться в конце всех расчётов данная переменная err, отвечающая за вывод кода ошибки, и, вызывающая GetLastError(), то всё будет верно, так?
Но зато, если не вызвать по конце какой-то функции (по цепочке выполнения кода эксперта) то переменная не обнулится, и это грозит не верным выполнением, в случает, если в предыдущей по цепочке выполнения кода была ошибка, а в текущей нет, НО код ошибки то возвращается последний... а для её сброса, необходимо вызвать данную функцию GetLastError(). Т.е. тут всё зависит от того, вызвана оно была или нет. Если нет уверенности, что будет везде так, проще перестраховаться и обнулять её каждый раз, так?
Можно err объявить на глобальном уровне, затем в start() перед вызовом GetLastError() обнулять её, напр.:
1) почему бы инициализацию не провести сразу при объявлении int err=0 ?
2) не проверял, но как пишет документация ошибка хранится в некой переменой, которая автообнуляется при использовании функции GetLastError(),
а также всегда изменяется при использовании некоторых функций (в основном терминаловских)
3) вот почему GetLastError() давал значение 0 после обращения к несуществующему номеру тикета в OrderSelect:
" Остальные функции не меняют значение переменной last_error ни при каких условиях. ................., OrderSelect, ...................."
Можно err объявить на глобальном уровне, затем в start() перед вызовом GetLastError() обнулять её, напр.:
то уже выйдет косяк по логике. Если не будет постоянно вызываться (теоретически в конце каждой пользовательской функции) GetLastError().
Иногда чаще вызывать приходится
Виктор (hoz), не пойму Ваших заморочек с последней ошибкой.
Объявите функцию для обработки ошибок и вызывайте её, где надо. Всё будет локально и везде можно использовать.
Виктор (hoz), не пойму Ваших заморочек с последней ошибкой.
Объявите функцию для обработки ошибок и вызывайте её, где надо. Всё будет локально и везде можно использовать.
Оно то понятно. Но функция то эта будет вызываться, когда нужно в моём случает мне, т.е. когда я хочу проверить, есть ли ошибка. Но если ошибка была где-то раньше, а в данном моменте её нет, то вернётся прежняя ошибка, которая была раньше.. Ведь в Вашей функции Вадим, не обнуляется переменная LastError, вызовом GetLastError(). Вот в чём суть..
Оно то понятно. Но функция то эта будет вызываться, когда нужно в моём случает мне, т.е. когда я хочу проверить, есть ли ошибка. Но если ошибка была где-то раньше, а в данном моменте её нет, то вернётся прежняя ошибка, которая была раньше.. Ведь в Вашей функции Вадим, не обнуляется переменная LastError, вызовом GetLastError(). Вот в чём суть..
Её не надо обнулять. Должна быть привычка везде после функций проверять ошибки. Ещё надо сделать вызов отключаемым. Чтобы не тормозило в боевом режиме. Т.е. это такой отладчик.
Исключение, конечно, для ошибок, которые надо анализировать, для принятия решения.
Оно то понятно. Но функция то эта будет вызываться, когда нужно в моём случает мне, т.е. когда я хочу проверить, есть ли ошибка. Но если ошибка была где-то раньше, а в данном моменте её нет, то вернётся прежняя ошибка, которая была раньше.. Ведь в Вашей функции Вадим, не обнуляется переменная LastError, вызовом GetLastError(). Вот в чём суть..