Бета-версия платформы MetaTrader 5 build 1995: Экономический календарь, MQL5-программы в виде сервисов и API для языка R - страница 7

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибка в стандартной библиотеке Controls\SpinEdit.mqh

Ilya Baranov, 2019.02.17 22:23

Со строки 39:

   int               MinValue(void) const { return(m_min_value); }
   void              MinValue(const int value);
   int               MaxValue(void) const { return(m_min_value); }

Надоело после каждого обновления терминала исправлять. Нельзя ли исправить?

 

Ученые мужи, подскажите можно ли в файле проекта *.mqproj задать путь куда компилировать ex5 ?

тут описано подробнее

https://www.mql5.com/ru/forum/303812

Компилирование проекта
Компилирование проекта
  • 2019.02.16
  • www.mql5.com
Перенес файл проекта в корень, подкорректировал в нем пути что бы все компилилось без ошибок, все компилится, но так же в корень а не в папку с экс...
 
fxsaber:
Стек рекурсии не переполняется
int f() { return(f()); }

void OnStart()
{
  f();
}

Оптимизатор разворачивает такую рекурсию в цикл, в данном случае бесконечный

 
Ilyas:

Оптимизатор разворачивает такую рекурсию в цикл, в данном случае бесконечный

Как ошибки находить?

 
fxsaber:

Как ошибки находить?

Это не вопрос к оптимизатору.

Я советую для любых рекурсивных функций ограничивать глубину, через параметр или статическую переменную.


Дополнительно (не советую делать так), можно искусственно помешать оптимизатору разворачивать рекурсии в цикл, например так:

sinput bool always_false=false;

int f()
  {  
   if(always_false)
      return(f()+f());
      
   return(f());
  }

void OnStart()
{
  f();
}
 
Сломали StringToShortArray
void OnStart()
{
  string Str = "Hello World!";
  short Array[];

  Print(StringToShortArray(Str, Array)); // 0
}


ЗЫ Пока использую такую альтернативу

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

int StringToShortArray2( const string Str, ushort &Array[], const int = 0, const int = 0 )
{
  const int Size = ArrayResize(Array, StringLen(Str));
  
  for (int i = 0; i < Size; i++)
    _W(Array[i]) = Str[i];
  
  return(Size);
}
 
fxsaber:
Сломали StringToShortArray


Спасибо за сообщение.

Исправил.

 
Ilyas:

Я советую для любых рекурсивных функций ограничивать глубину, через параметр или статическую переменную.

Дополнительно (не советую делать так), можно искусственно помешать оптимизатору разворачивать рекурсии в цикл

Было бы неплохо, чтобы компилятор выдавал предупреждение для таких явно зацикленных вариантов (будь то рекурсия или цикл).  Это бы сильно облегчило жизнь, особенно для рекурсий.  Ведь такие ошибки бывают очень трудны в локализации, независимо от того, переполняется стек или нет.  В MQL это особенно актуально по той причине, что видимость функций не привязана к порядку их объявления, в отличие от C++.  Поэтому очень легко случайно образовать замкнутую цепь.
 
Alexey Navoykov:
Было бы неплохо, чтобы компилятор выдавал предупреждение для таких явно зацикленных вариантов (будь то рекурсия или цикл).  Это бы сильно облегчило жизнь, особенно для рекурсий.  Ведь такие ошибки бывают очень трудны в локализации, независимо от того, переполняется стек или нет.  В MQL это особенно актуально по той причине, что видимость функций не привязана к порядку их объявления, в отличие от C++.  Поэтому очень легко случайно образовать замкнутую цепь.

В случае зацикленности в журнале терминала ошибка типа abnormal termination (вроде так пишется) при удалении/перекомпиляции эксперта.

С индикаторами - полностью повиснет чарт. В случае скриптов сложнее.

 
Alexey Kozitsyn:

В случае зацикленности в журнале терминала ошибка типа abnormal termination (вроде так пишется) при удалении/перекомпиляции эксперта.

Но место в коде, где идёт зацикливание, вам же не покажут. Я это имел ввиду под локализацией проблемы.
Причина обращения: