[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 721

 
Abzasc:

Смысл - не плодить переменные, много условий и счетчиков. 




смысл писать тогда правильно, а не пользуясь сокращениями языка:

int a;
for(a=0;a<8;a++){
//здесь что то делаем
}
for(a=0;a<8;a++){
//делаем что нибудь другое
}
 
Abzasc:

Смысл - не плодить переменные, много условий и счетчиков. 

Ну так пожалуйста, компилятор позволяет делать и такие штуки…

//+------------------------------------------------------------------+
int start()
  {
  bool flag;
  
   if(flag){
      for(int a = 0; a < 10;a++){
         Print("a = ", a);
      }
   }else{
      for(a = 10; a > 0;a--){
         Print("a = ", a);
      }
   }
  }
//+------------------------------------------------------------------+
Флаг по умолчанию имеет состояние False, поэтому первый цикл for в котором объявляется переменная а, не будет исполнен, что не мешает использовать эту же "не объявленную" переменную в ветке else :)
 
Abzasc:

Условие если

здесь что то делаем

иначе если другое условие

делаем что нибудь другое

Смысл - не плодить переменные, много условий и счетчиков.

Для этого не требуется переинициализация переменной. Делайте всё в соответствии с тем, что написали и ваша переменная а будет использоваться в нужных местах ваших логических ветвлений без переинициализации. Один раз её объявили и используйте во благо себе и всему человечеству... :) Главное самому не потеряться где и для чего вы её используете...
 
ToLik_SRGV:

поэтому первый цикл for в котором объявляется переменная а, не будет исполнен 

Цикл должен исполняться всегда.
 
IgorM:


  смысл писать тогда правильно, а не пользуясь сокращениями языка: 

Вся проблема была в отсутствии {}, что ли? Во спасибо!
 
artmedia70:
Для этого не требуется переинициализация переменной. Делайте всё в соответствии с тем, что написали и ваша переменная а будет использоваться в нужных местах ваших логических ветвлений без переинициализации. Один раз её объявили и используйте во благо себе и всему человечеству... :) Главное самому не потеряться где и для чего вы её используете...
Так и делал, на 715 стр., 18.07.2010 14:56, скобки после счетчика не поставил...
 

Выше показанный «эффект», доказывает что MQL-машина сначала просматривает EX4 файл на предмет объявленных переменных, и создает их вне зависимости от логических ветвлений в полном объеме. С одной стороны получается что не экономит ОЗУ, а с другой можно создавать подобные конструкции, хотя на мой взгляд подобный стиль это не лучший вариант.

 
Abzasc:
Вся проблема была в отсутствии {}, что ли? Во спасибо! 


вся проблема была в объявлении переменной:

int a;

я ее обьявил и потом использую где надо и когда надо, а у Вас было повторное объявление переменной - скорее всего компилятор и не пропускал

ну, а {} - это объявление блока который будет выполняться за одну итерацию цикла, если у Вас один оператор в цикле, тогда {} не нужно, а если больше тогда обязательно поставьте {} иначе потом будете искать почему не правильно считается цикл

ЗЫ: если только начали заниматься программированием, тогда ставьте пока всегда после for фигурные скобки, потом освоитесь уберете 

 
ToLik_SRGV:

Код IgorM  ошибок не дает. Не думаю, что под а будет выделяться память в зависимости от количества упоминаний в ветках, так что все нормально.
 
Abzasc:
Цикл должен исполняться всегда.

Причем здесь цикл. Это просто пример, того что переменная создаваемая в заведомо не используемом блоке, все равно в «игре», и будет видна, и пригодна к использованию во всем методе start(), без нужды ее повторной инициализации и уж тем более деинициализации перед повторным использованием.

Причина обращения: