Кто понимает логику инициализации переменных? - объясните плизззз - страница 3

 

Значит модификатор static в отношении переменных глобальной видимости не работает.

Вы неправильно понимаете static.

Особенно лишне употребляя его в описании глобальной (не путать со специальными Global Variables) переменной вне функций.


Смена настроек вызывает переинициализацию индикатора. И это правильно. Вот проверочный код:

extern int MyVar=10; 

int init()
  {
   Print("Init ",MyVar);
   return(0);
  }
int deinit()
  {
   Print("Deinit");
   return(0);
  }
int start()
  {
   Print("Counter ",MyVar);
   return(0);
  }

Вот результат - при смене настроек индикатор полностью штатно переинициализируется. Все абсолютно коррекно.

10:34:10 TestInd EURGBP,M1: loaded successfully
10:34:10 TestInd EURGBP,M1: Init 10          // добавлен на график со значением 10
10:34:10 TestInd EURGBP,M1: initialized
10:34:10 TestInd EURGBP,M1: Counter 10       // нормально работает
10:34:34 TestInd EURGBP,M1: Deinit           // деинициализация после смены параметра на 11
10:34:34 TestInd EURGBP,M1: deinitialized    // индикатор деинициализирован штатно
10:34:34 TestInd EURGBP,M1: uninit reason 5
10:34:34 TestInd EURGBP,M1: Init 11          // инициализируется с новым значением
10:34:34 TestInd EURGBP,M1: initialized      // инициализировался
10:34:43 TestInd EURGBP,M1: Counter 11       // работает с новым значением


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

 
Korey >>:

в МТ-4 что либо изменять кроме документации необходимости нет и нежелательно, т.к. к этому привыкли.
Однако, этот же баг в понимании видимости и статичности при переходе к МТ-5 может создать проблемы.

Ваш уровень знаний катастрофичен для Вас и Ваших экспертов.


В любом случае, положитесь на наших разработчиков - мы всегда стараемся сделать хорошие решения. Мы делаем массу ошибок, публично их разбираем, признаем и исправляем. Это наша работа.

 

to Renat

нам то что, - мне как слесарю-компьютологу не в первый раз, и не в таком копались,
А вот Вы создаете Новый Язык для программирования торговых систем,
и кроме Вас мало кто на всей Планете занимается такими торговыми языками на Вашем же уровне
- МТ-4/MQL-4 ставим твердую тройку, и эту твердую тройку обсуждаем на этом форуме.
Однако Ждем от Вас МТ-5 с оценокй "Отлично".

 
ок
 

прошу прощения - опоздал к разборкам...

мой вопрос на самом деле был вызван простой необходимостью: мне нужны действительно статические переменные, которые инитятся только один раз в момент старта индикатора\эксперта и дальше живут до тех пор, пока он не уберется с графика. Вы правильно пишете что "руки надо мыть" но зачем это делать за меня в моем присуттствии?!

Для меня была бы понятна и естественна следующая реализация:

  1. статическая переменная создается в момент присоединения индикатора\эксперта к графику и удаляется вместе с его удалением.
  2. при любых изменениях (смене счета, тайма, символа) она остается неизменной т.е. именно статической (и никто ее не переинитивает принудительно).
Если мне нужно - я сам отловлю факт смены и проинитю ее заново. А в нынешней реализации у меня негде сохранить ее значение чтобы восстановить его после не нужного мне принудительного переинита (глобальные переменные - не предлагать! гемор тот еще в случае хотябы десятка разных графиков).
 

возможно простым решением "затыкающим" эту проблему станет использование модификатора static именно к глобальным переменным? я думаю это будет совсем не сложно реализовать ;) одна проверка перед переинитом каждой переменной: если есть static у глобальной переменной - просто не трогаем ее.

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